如果我在`SqlCommand`上调用`ExecuteReader`方法引用一个不返回行集的存储过程会发生什么?

时间:2011-05-24 18:05:06

标签: .net ado.net sqldatareader

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

以防万一:零行集与一个包含完全零行的行集不同。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您仍应该收到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时,您只会“摔倒”。