如何testing数据集是否为空?

我正在修改使用以下内容执行查询的其他人的代码:

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

如何判断DataSet是否为空(即没有返回结果)?

如果我理解正确,这应该适合你

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

您不必testing数据集。

Fill()方法返回添加的行数。

请参阅DbDataAdapter.Fill方法(DataSet)

这不是一个有效的答案,因为它给出了以下错误

找不到表0。

改用下面的语句

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

你应该遍历所有的表,并testingtable.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. 如果(ds!= null)
  2. 如果(ds.Tables.Count> 0)
  3. 如果(ds.Tables [0] .Rows [0] .Count> 0)

此代码将显示一个错误,如Table[0] can not be found! 因为在位置0将不会有任何表格。

 if (ds.Tables[0].Rows.Count == 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是空的。

不要忘记设置表名da.Fill(ds,“tablename”);

所以你使用表名返回数据而不是0

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

从SQL查询返回结果时,我发现表[0]存在,但它有零行。 所以在我的情况下,这工作:

如果(ds.Tables [0] .Rows.Count == 0)//空

这不起作用:

如果(ds.Tables.Count == 0)

检查数据集是否为空您必须检查空值和表计数。

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

Fill是命令总是返回插入到数据集中的多less条logging。

 DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn); var count = da.Fill(ds); if(count > 0) { Console.Write("It is not Empty"); } 
 If (ds != null) 

应该为你做的工作!