这是我想出的代码::
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,应该怎么做?
答案 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,因为没有第二行 - 所以其他行发生。