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

发布于 2024-11-04 13:21:44 字数 467 浏览 3 评论 0原文

这是我想出的代码::

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,应该怎么做?

Here is the code i came up with::

reader = cmd.ExecuteReader();
reader.Read();
if (reader.Read())
    intQ = int.Parse(reader[0].ToString());
else
    intQ = 0;

txtblck.Text = intQ.ToString();
reader.Close();

But this causes it to always execute the else, and if i do this:

reader = cmd.ExecuteReader();
if (reader.Read())
    intQ = int.Parse(reader[0].ToString());
else
    intQ = 0;

txtblck.Text = intQ.ToString();
reader.Close();

The if always return true, how should do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

木森分化 2024-11-11 13:21:44

检查 HasRows 属性。也许这就是您正在寻找的(您的问题对我来说很清楚)。

if( reader.HasRows )

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

你的 SQL 语句是什么样的?

Check the HasRows property. Perhaps this is what you're looking for (your question is quite clear to me).

if( reader.HasRows )

HasRows returns a value if the resultset contains records.
Do you want to achieve that ?
Or, do you want to know whether a particular field of a certain record contains a value ?

How does your SQL Statement look like ?

疏忽 2024-11-11 13:21:44

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 将抛出异常 - 这与零行不同。也许您应该检查 null 值,或使用 int.TryParse 代替。

reader.Read() advances the reader to the next record, where the reader is initially set to before the first record. If calling reader.Read() returns false this means that it was unable to advance to the next record (i.e. the current record is the last record).

This means that if you wish to read the first record you need to call reader.Read() once, and if reader.Read() returns false it means there were no records - like so:

using (var reader = cmd.ExecuteReader())
{
    if (reader.Read())
    {
        intQ = int.Parse(reader[0].ToString());
    }
    else
    {
        intQ = 0;
    }
}
txtblck.Text = intQ.ToString();

FYI int.Parse will throw an exception if the first record is null - this is different from having zero rows. Perhaps you should check for null values, or use int.TryParse instead.

红衣飘飘貌似仙 2024-11-11 13:21:44

检查 SqlReader 的 MSDN 文档 显示它有一个名为 HasRows 的属性,您可以使用它。

if (reader.HasRows)
{
   ...
}

Checking the the MSDN documentation for SqlReader reveals that is has a property called HasRows which you can use.

if (reader.HasRows)
{
   ...
}
泅人 2024-11-11 13:21:44

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

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

Read() gets the next row of the result set.

So if you return one row the first read gets that row and the second Read() returns false as there is no second row - so the else happens.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文