2010-06-04 2 views
38

Я модификация коды кто-то еще, где запрос выполняется с помощью следующее:Как проверить, пуст ли DataSet?

DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn); 
da.Fill(ds); 

Как я могу сказать, если набор данные пусты (т.е. никаких результатов не были возвращены)?

ответ

53

Если я правильно понимаю, это должно работать для вас

if (ds.Tables[0].Rows.Count == 0) 
{ 
    // 
} 
+0

Я полагаю, что если запрос использовал несколько таблиц, это не сработало бы должным образом. – MCS

+0

Ах, но простой цикл над количеством таблиц, захватывающих количество строк из каждого, будет простым для кода. Я говорю, что проверить, в том числе. – jcolebrand

+1

Как насчет ds.Tables.Count? – captainsac

19

Вам не нужно проверять набор данных.

Метод Fill() возвращает количество добавленных строк.

См DbDataAdapter.Fill Method (DataSet)

+0

Желание я мог бы использовать это, но код, который заполняет набор данных, является частью метода, который возвращает заполненный набор данных. Код, который я пишу, вызывает метод, подобный этому DataSet ds = GetResults (sql, conn). – MCS

+1

Зацикливание таблиц и строк подсчета определенно будет работать, но проверьте свойство ExtendedProperties DataSet, которое позволит вам установить такую ​​пользовательскую информацию из GetResults() и использовать ее при возврате. Возможно, это не применимо здесь, но, возможно, в будущем. – Tom

+0

'Fill()' фактически возвращает только число строк первой таблицы в DataSet. Если в DataSet имеется несколько таблиц, оно не возвращает фактическое общее количество строк. –

14

Вы должны перебрать все таблицы и испытания, если table.Rows.Count является 0

bool IsEmpty(DataSet dataSet) 
{ 
    foreach(DataTable table in dataSet.Tables) 
     if (table.Rows.Count != 0) return false; 

    return true; 
} 

Обновление: поскольку DataTable может содержать удаленные строки RowState = Deleted, в зависимости от того, что вы хотите достичь, было бы неплохо проверить DefaultView вместо этого (который не содержит удаленных строк).

bool IsEmpty(DataSet dataSet) 
{ 
    return !dataSet.Tables.Cast<DataTable>().Any(x => x.DefaultView.Count > 0); 
} 
1

Этот код будет отображаться сообщение об ошибке, как Table[0] can not be found! , потому что не будет никакого стола в положении 0.

if (ds.Tables[0].Rows.Count == 0) 
{ 
    // 
} 
-3
If (ds != null) 

должны делать работу за вас!

14

Это не является правильным ответом, поскольку это дает следующие ошибки

Cannot find table 0.

Используйте следующее заявление вместо

if (ds.Tables.Count == 0) 
{ 
    //DataSet is empty 
} 
+1

Ur Suggestion работает для меня, спасибо :) –

0
MySqlDataAdapter adap = new MySqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
adap.Fill(ds); 
if (ds.Tables[0].Rows.Count == 0) 
{ 
     MessageBox.Show("No result found"); 
} 

запрос будет получать данные в наборе данных, а затем мы будем проверять набор данных, который является пустым или содержит некоторые данные. для этого мы делаем ds.tables [0] .Rows.Count == o это будет подсчитывать количество строк, находящихся в наборе данных. Если указанное выше условие истинно, то набор данных, т.е. ds, пуст.

+1

, пожалуйста, добавьте некоторое объяснение в свой код. –

+0

Ответ в наборе данных, что он получает строку или нет. просто проверьте, что количество строк равно нулю или нет. – NomanJaved

4

Мы можем проверить все три пути.

  1. если (DS! = NULL)
  2. если (ds.Tables.Count> 0)
  3. если (ds.Tables [0] .Rows [0] .Count> 0)
+1

может быть безопасно выполнять все три проверки. третий оператор должен быть ds.Tables [0] .Rows.Count> 0 – Samuel

+1

3rd one (ds.Tables [0] .Rows.Count> 0) выдает следующую ошибку: Не удается найти таблицу 0. –

0

Не забудьте установить имя таблицы da.Fill (DS, "имя_таблица");

Таким образом, вы возвращаете данные, используя имя таблицы вместо 0

if (ds.Tables["tablename"].Rows.Count == 0) 
{ 
    MessageBox.Show("No result found"); 
} 
0

При возврате результатов из SQL запроса я считаю, что таблицы [0] существует, но она имеет нулевые строки. Так что в моей ситуации это сработало:

если (ds.Tables [0] .Rows.Count == 0) // пустой

Это не сработало:

если (ds.Tables.Count == 0)

0

Проверка набора данных пуста или нет. Вы должны проверить количество нулей и таблиц.

DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn); 
da.Fill(ds); 
if(ds != null && ds.Tables.Count > 0) 
{ 
// your code 
} 
0

Fill это команда всегда возвращает количество записей вставлено в наборе данных.

DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn); 
var count = da.Fill(ds); 
if(count > 0) 
{ 
    Console.Write("It is not Empty"); 
} 
Смежные вопросы