如何解决如果我在引用不返回行集的存储过程的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
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。