我有一些使用数据读取器访问存储过程的代码,它还返回一些输出参数和结果集。数据读取器是使用 using block 创建的。
问题是我有时在尝试访问输出参数时收到“对象引用未设置为对象实例”的信息。我知道如果在尝试访问输出参数时未关闭数据读取器,通常会收到此错误。但是,由于 datareader 是在 using block 中访问的,并且访问输出参数的代码位于 using block 之外,因此参数永远不应该为 null。
这怎么可能?
SqlCommand command = new SqlCommand();
command.CommandText = "stored proc";
CommandBehavior commandBehavior = new CommandBehavior();
using (var reader = command.ExecuteReader(commandBehavior))
{
while(reader.Read())
{
//access record values
}
}
var param1 = command.Parameters["firstParam"].Value; //<-- null reference error here
为了简洁起见,我省略了一些代码。
代码和 SQL 服务器在虚拟机上运行。
其他相关事实:C# .Net Framework 4.0、SQL Server 2012
最佳答案
您的代码可能是正确的,您只需要在您提到的行上处理 null 即可,请尝试用以下代码替换该行。
var param1 = Convert.ToString(command.Parameters["firstParam"].Value);
关于stored-procedures - 访问存储过程输出参数时出现间歇性空引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37787075/