如何测试DataSet是否为空?

MCS*_*MCS 47 c# ado.net dataset

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

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
Run Code Online (Sandbox Code Playgroud)

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

ros*_*533 73

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

if (ds.Tables[0].Rows.Count == 0)
{
    //
}
Run Code Online (Sandbox Code Playgroud)

  • 这不会一直有效.我只是尝试了相同,但在我的情况下,我收到"表[0]无法找到!".然后我想出如果我的查询没有返回空结果集,而是返回错误,上面的方法将无法正常工作.相反,简单但更简单的方法是使用check for ds.Tables.Count条件.这很简单,适用于所有场景. (8认同)
  • 您可以检查`(ds == null || ds.Tables.Count == 0 || ds.Tables [0] .Rows.Count == 0)`这样,满足的第一个条件将防止出错. (7认同)
  • 怎么样ds.Tables.Count? (4认同)
  • 这不是一个正确的答案,因为它会给出错误.找不到表0. (3认同)

Tom*_*Tom 21

您不必测试数据集.

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

请参阅DbDataAdapter.Fill方法(DataSet)

  • 循环遍历表和计数行肯定会有效,但请查看DataSet的ExtendedProperties属性,这将允许您在GetResults()中设置此类自定义信息并在返回时使用它.可能不适用于此,但可能在将来. (2认同)

cap*_*sac 17

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

找不到表0.

请改用以下语句

if (ds.Tables.Count == 0)
{
     //DataSet is empty
}
Run Code Online (Sandbox Code Playgroud)


Jür*_*ock 15

你应该遍历所有表并测试table.Rows.Count是否为0

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

    return true;
}
Run Code Online (Sandbox Code Playgroud)

更新:由于DataTable可能包含已删除的行RowState = Deleted,具体取决于您要执行的操作,因此最好选中DefaultView(不包含已删除的行).

bool IsEmpty(DataSet dataSet)
{
    return !dataSet.Tables.Cast<DataTable>().Any(x => x.DefaultView.Count > 0);
}
Run Code Online (Sandbox Code Playgroud)


小智 6

我们可以检查三种方式.

  1. if(ds != null)
  2. if(ds.Tables.Count > 0 )
  3. if(ds.Tables[0].Rows.Count > 0)

  • 进行全部三个检查可能是安全的。第三个语句应该是ds.Tables [0] .Rows.Count&gt; 0 (2认同)