stored-procedures - 访问存储过程输出参数时出现间歇性空引用错误

标签 stored-procedures sql-server-2012 ado.net

我有一些使用数据读取器访问存储过程的代码,它还返回一些输出参数和结果集。数据读取器是使用 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/

相关文章:

sql - 两个结果集相减SQL

c# - 在 ListView 中更改颜色线

mysql - Google Data Studio 能否调用带参数的 MySQL 存储过程并使用结果集?

sql-server-2005 - SQL Server 将存储过程代码存储在哪里?

asp.net-mvc - FluentNHibernate SchemaUpdate 不起作用

java - 如何将JAVA连接到SQL Server 2012?

c# - 寻找如何创建通用 CreateDataAdapter

c# - 检索 SQL 表中的列数 - C#

mysql - 为什么 mySQL 过程在从过程内部调用时返回 null,但在单独调用时则不返回 null

python - 如何像使用 Python 一样使用 SQL,通过复制行同时更改该行中的一个值(其中该值源自不同的列)?