如何检查sqldatareader是否返回任何值
本文关键字:sqldatareader 是否 返回 任何值 检查 何检查 | 更新日期: 2023-09-27 17:53:47
下面是我想出来的代码::
reader = cmd.ExecuteReader();
reader.Read();
if (reader.Read())
intQ = int.Parse(reader[0].ToString());
else
intQ = 0;
txtblck.Text = intQ.ToString();
reader.Close();
但是这会导致它总是执行else,如果我这样做:
reader = cmd.ExecuteReader();
if (reader.Read())
intQ = int.Parse(reader[0].ToString());
else
intQ = 0;
txtblck.Text = intQ.ToString();
reader.Close();
if总是返回true,该怎么做呢?
检查HasRows属性。也许这就是你要找的(你的问题对我来说很清楚)。
if( reader.HasRows )
如果结果集包含记录,HasRows返回一个值。你想实现这个目标吗?或者,您想知道某个记录的特定字段是否包含值?
你的SQL语句是怎样的?
reader.Read()
将读取器推进到下一条记录,其中读取器最初设置为在第一条记录之前。如果调用reader.Read()
返回false,这意味着它无法前进到下一条记录(即当前记录是最后一条记录)。
这意味着如果你想读取第一个记录,你需要调用reader.Read()
一次,如果reader.Read()
返回false,这意味着没有记录-像这样:
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
intQ = int.Parse(reader[0].ToString());
}
else
{
intQ = 0;
}
}
txtblck.Text = intQ.ToString();
如果第一个记录为空,int.Parse
将抛出异常——这与零行不同。也许你应该检查空值,或者使用int.TryParse
代替。
检查SqlReader
的MSDN文档显示它有一个名为HasRows
的属性,您可以使用。
if (reader.HasRows)
{
...
}
Read()获取结果集的下一行。
所以如果你返回一行,第一个read得到那一行,第二个read()返回false,因为没有第二行-所以else发生。