如何检查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,该怎么做呢?

如何检查sqldatareader是否返回任何值

检查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发生。