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

时间:2011-04-30 07:35:35

标签: c# null sqldatareader

这是我想出的代码::

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();

如果总是返回true,应该怎么做?

4 个答案:

答案 0 :(得分:8)

检查HasRows属性。也许这就是你要找的东西(你的问题对我很清楚)。

if( reader.HasRows )

如果结果集包含记录,则HasRows返回一个值。 你想实现吗? 或者,您想知道某个记录的特定字段是否包含值吗?

您的SQL语句如何?

答案 1 :(得分:3)

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();

如果第一条记录为空,FYI int.Parse将抛出异常 - 这与零行不同。也许你应该检查空值,或者改为使用int.TryParse

答案 2 :(得分:1)

检查the MSDN documentation for SqlReader显示有一个名为HasRows的属性,您可以使用。

if (reader.HasRows)
{
   ...
}

答案 3 :(得分:0)

Read()获取结果集的下一行。

因此,如果您返回一行,则第一行读取该行,第二行Read()返回false,因为没有第二行 - 所以其他行发生。