问题描述
|
我有一个“ 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
。