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

| 我有一个“ 0”,可能会返回零个或多个行集。如果偶然地,“ 0”将返回恰好为零的行集*,而我调用了其“ 2”方法,会发生什么呢?我会收到无法阅读的
SqlDataReader
,还是会出现异常? 以防万一:零行集与只包含零行的一个行集是不同的。     
已邀请:
没有行集,您的
reader.FieldCount
将为零。如果使用数据集而不是读取器,则将获得一个空数据集,其中没有行集。     
SqlDataReader.Read()
HasRows
将返回
false
var reader = command.ExecuteReader();
if (reader.HasRows) // false
{
    while (reader.Read()) // false
    {
        // will never reach
    }
}
    
您仍然应该收到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
。     

要回复问题请先登录注册