2012-05-26 6 views
4

Каков самый простой и эффективный способ поиска данных, возвращаемых с помощью запроса? Я использую DataTable, например sqlAdapter.Fill(_table1), а затем делает _table1.Rows.Count, чтобы увидеть, имеет ли тип данных какие-либо строки. Существуют ли какие-либо классы и функции в C#, которые просто дают мне, если есть какие-либо строки. Мне не нужны данные строк. Просто счет - это то, что мне нужно. Я использую этот запрос для очень больших наборов данных, поэтому я не хочу заполнять данные, содержащие всю информацию о строках.C# SQL, если запрос возвращает количество строк

+1

Сделайте запрос на подсчет. –

ответ

7
string myScalarQuery = "select count(*) from TableName"; 

SqlCommand myCommand = new SqlCommand(myScalarQuery, myConnection); 
myCommand.Connection.Open(); 
int count = (int) myCommand.ExecuteScalar(); 
myConnection.Close(); 

Возможная оптимизация запроса в комментариях ниже: Select Top 1 * FROM TableName

+0

Насколько я понимаю, вы хотите, чтобы запрос определял, содержит ли таблица какие-либо строки? Так почему бы просто не запустить запрос на подсчет – TGH

+0

Выглядит хорошо для меня (+1). Ну, не будучи статически типизированным запросом ;-) * Однако *, ExecuteScalar имеет тип возвращаемого объекта, поэтому Convert.ToInt32 может быть в порядке. –

+0

Если вы просто хотите видеть строки и на самом деле не нуждаетесь в подсчете, возможно, SELECT TOP 1 1 FROM вместо * -, чтобы прекратить обработку, как только увидит строку. – user1166147

6

Наименее дорогой способ использует SqlDataReader в HasRows свойство
UPDATE: конечно, самый эффективный запрос SELECT будет выглядеть так: «Выберите Top 1 1 FROM TableName», который даже не нужно извлекать данные столбцов.

using (SqlConnection conn = new SqlConnection(connectionString)) 
{ 
    conn.Open(); 
    using (SqlDataReader rdr = cmd.ExecuteReader()) 
    { 
     if (rdr.HasRows) 
      ... 
    } 
} 
+0

. Каким будет SqlCommand в этом случай (для полноты)? Есть ли причина одобрить это за COUNT? –

+0

Самый медленный компонент всегда будет самим запросом, поэтому часть C# является менее важной. – TGH

Смежные вопросы