.net 如果对引用不返回行集的存储过程的`SqlCommand`调用`ExecuteReader`方法,会发生什么?
我有一个.net 如果对引用不返回行集的存储过程的`SqlCommand`调用`ExecuteReader`方法,会发生什么?,.net,ado.net,sqldatareader,.net,Ado.net,Sqldatareader,我有一个SqlCommand,它可能返回零个或多个行集。如果碰巧SqlCommand将返回零行集*并且我调用其ExecuteReader方法,会发生什么情况?我是得到了无法读取的SqlDataReader,还是得到了异常 以防万一:零行集与一个包含零行的行集不同。SqlDataReader.Read()以及HasRows将返回false: var reader = command.ExecuteReader(); if (reader.HasRows) // false { while
SqlCommand
,它可能返回零个或多个行集。如果碰巧SqlCommand
将返回零行集*并且我调用其ExecuteReader
方法,会发生什么情况?我是得到了无法读取的SqlDataReader
,还是得到了异常
以防万一:零行集与一个包含零行的行集不同。SqlDataReader.Read()
以及HasRows
将返回false
:
var reader = command.ExecuteReader();
if (reader.HasRows) // false
{
while (reader.Read()) // false
{
// will never reach
}
}
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
您仍然应该收到一个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
您的读取器时,您将只是“失败”。如果没有行集,FieldCount
将为零。如果使用数据集而不是读卡器,则无行集的数据集将为空。您的读卡器。无行集的FieldCount
将为零。如果使用数据集而不是读卡器,则无行集的数据集将为空。最好的方法是尝试yourself@abatischev:不太好。最好的方法是,如果文档不糟糕,并且实际解释了在这些角落案例中发生的情况。这不是一个角落/对冲案例。如果重新运行0条记录(或行集;)并不常见,那么SqlDataReader将返回null
@IAbstract:我从来没有说过一个行集包含零条记录。我说的是零行集。最好的办法是尝试yourself@abatischev:不太好。最好的方法是,如果文档不糟糕,并且实际解释了在这些角落案例中发生的情况。这不是一个角落/对冲案例。如果重新运行0条记录(或行集;)并不常见,那么SqlDataReader将返回null
@IAbstract:我从来没有说过一个行集包含零条记录。我说的是零行。@abatischev:所以。。。我如何判断存储过程返回的是零行集,还是一个或多个空行集?@Eduardo:在空行集下,您是否理解一个字段为空的行?或者什么?@abatischev:如果0=1选择1
生成零行集。@abatischev:相反,select 1其中0=1
生成一个空行集。@abatischev:当我在SQL Server Management Studio上测试select null
时,它返回了一个包含一行的行集。@abatischev:所以。。。我如何判断存储过程返回的是零行集,还是一个或多个空行集?@Eduardo:在空行集下,您是否理解一个字段为空的行?或者什么?@abatischev:如果0=1选择1
生成零行集。@abatischev:相反,select 1其中0=1
生成一个空行集。@abatischev:当我在SQL Server Management Studio上测试select null
时,它返回一个包含一行的行集。