如果我在引用不返回行集的存储过程的“SqlCommand”上调用“ExecuteReader”方法,会发生什么情况?

发布于 2024-11-09 04:05:14 字数 206 浏览 6 评论 0原文

我有一个SqlCommand,它可能返回零个或多个行集。如果 SqlCommand 偶然返回零行集*,并且我调用其 ExecuteReader 方法,会发生什么情况?我是否收到无法读取的 SqlDataReader,或者是否收到异常?

以防万一:零行集与恰好包含零行的行集不同。

I have a SqlCommand which may return zero or more rowsets. What happens if, by chance, the SqlCommand would return exactly zero rowsets* and I invoke its ExecuteReader method? Do I get a SqlDataReader that cannot be read, or do I get an exception?

Just in case: Zero rowsets is not the same thing as one rowset containing exactly zero rows.

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

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

发布评论

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

评论(3

蓦然回首 2024-11-16 04:05:14

如果没有行集,您的 reader.FieldCount 将为零。如果您使用数据集而不是读取器,您将获得没有行集的空数据集。

Your reader.FieldCount will be zero for no rowset. If you use a dataset instead of a reader, you will get a null dataset for no rowset.

奢望 2024-11-16 04:05:14

SqlDataReader.Read() 以及 HasRows 将返回 false

var reader = command.ExecuteReader();
if (reader.HasRows) // false
{
    while (reader.Read()) // false
    {
        // will never reach
    }
}

SqlDataReader.Read() as well as HasRows will return false:

var reader = command.ExecuteReader();
if (reader.HasRows) // false
{
    while (reader.Read()) // false
    {
        // will never reach
    }
}
陌若浮生 2024-11-16 04:05:14

您仍然应该收到一个 SqlDataReader 对象。当您尝试:

using (SqlCommand command = new SqlCommand( /* params */))
using (SqlDataReader reader = command.ExecuteReader())
{
    if (reader.HasRows)    // check to see if we have any rows
    {
        while (reader.Read())
        {
            // process
        }
    }
}

...您将简单地“失败”,因为 Read() 将返回 false

You should still receive an SqlDataReader object. when you try:

using (SqlCommand command = new SqlCommand( /* params */))
using (SqlDataReader reader = command.ExecuteReader())
{
    if (reader.HasRows)    // check to see if we have any rows
    {
        while (reader.Read())
        {
            // process
        }
    }
}

... you will simply 'fall through' as Read() will return false.

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