【发布时间】:2011-02-27 22:07:00
【问题描述】:
我正在修改其他人的代码,其中使用以下内容执行查询:
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
如何判断 DataSet 是否为空(即没有返回结果)?
【问题讨论】:
我正在修改其他人的代码,其中使用以下内容执行查询:
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
如何判断 DataSet 是否为空(即没有返回结果)?
【问题讨论】:
【讨论】:
Fill() 实际上只返回数据集中第一个表的行数。如果 DataSet 中有多个表,它不会返回实际的总行数。
如果我理解正确,这应该对你有用
if (ds.Tables[0].Rows.Count == 0)
{
//
}
【讨论】:
(ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0),这样满足的第一个条件将防止出现错误。
您应该遍历所有表并测试 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);
}
【讨论】:
此代码将显示如下错误
Table[0] can not be found!
因为位置 0 不会有任何表格。
if (ds.Tables[0].Rows.Count == 0)
{
//
}
【讨论】:
If (ds != null)
应该为你做这项工作!
【讨论】:
这不是一个有效的答案,因为它给出了以下错误
找不到表 0。
改用下面的语句
if (ds.Tables.Count == 0)
{
//DataSet is empty
}
【讨论】:
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 为空。
【讨论】:
我们总共可以检查三种方式。
if(ds != null)if(ds.Tables.Count > 0 )if(ds.Tables[0].Rows.Count > 0)【讨论】:
别忘了设置表名 da.Fill(ds,"tablename");
所以你使用表名而不是 0 返回数据
if (ds.Tables["tablename"].Rows.Count == 0)
{
MessageBox.Show("No result found");
}
【讨论】:
当从 SQL 查询返回结果时,我发现表 [0] 存在,但它有零行。所以在我的情况下这有效:
if (ds.Tables[0].Rows.Count == 0) //空
这不起作用:
如果(ds.Tables.Count == 0)
【讨论】:
要检查数据集是否为空,您必须检查 null 和表数。
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
if(ds != null && ds.Tables.Count > 0)
{
// your code
}
【讨论】:
Fill is 命令总是返回插入数据集中的记录数。
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
var count = da.Fill(ds);
if(count > 0)
{
Console.Write("It is not Empty");
}
【讨论】:
这应该可行
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(sqlString, sqlConn);
da.Fill(ds);
if(ds.Tables.Count > 0)
{
// enter code here
}
【讨论】:
你可以使用这样的东西
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
//Code
}
【讨论】:
更好的方法是使用以下方法:
ds.Tables.Count == 0
作为 ds.Tables[0].Rows.Count == 0
可以报错:
System.IndexOutOfRangeException: '找不到表 0。'
【讨论】: