C#-使用SqlDataReader读取过程的输出参数[duplicate]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#-使用SqlDataReader读取过程的输出参数[duplicate]相关的知识,希望对你有一定的参考价值。
我有以下情况:我有一个接受一定数量参数的过程,在本例中,我将其称为过程“ sp_dosomething
”,该过程接受@paramA, @paramB
作为其输入参数,而接受@paramC
作为其输出参数,因此,我们将拥有的SQL:
exec sp_dosomething @paramA = @paramA
, @paramB = @paramB
, @paramC = @paramC output
到目前为止,很好,该过程返回一组记录,为此示例假设100条记录。在下面,您可以看到该代码实际读取该过程返回的记录集:
using (var sqlConnection = _myfactory.CreateSqlConnection(_connectionString))
sqlConnection.Open();
using (var sqlCommand = _myfactory.CreateCommand(sqlConnection, _myfactory.GetParameters(procedureParameters)))
var dataReader = sqlCommand.ExecuteReader();
while (dataReader.Read())
// here I'd read the 100 records that the procedure returns.
现在出现问题:如何从上面代码的@paramC
中获取值?到目前为止,我已经尝试过:
sqlCommand.Parameters["@paramC"].Value;
在sqlCommand
范围内和在[while (datareader.Read())
]范围内,均不成功,因为它总是返回null
。我知道我可以在[sqlCommand.ExecuteNonQuery()
]语句之前调用while (datareader.Read())
并检索输出参数,但是我想知道是否有任何方法可以实现而无需再次调用数据库。换句话说,同时检索记录集和过程的输出值。
@解决方案(来自下面的评论):
解决方案的一个例子是:
using (var sqlConnection = _myfactory.CreateSqlConnection(_connectionString))
sqlConnection.Open();
using (var sqlCommand = _myfactory.CreateCommand(sqlConnection, _myfactory.GetParameters(procedureParameters)))
var dataReader = sqlCommand.ExecuteReader();
while (dataReader.Read())
// here I'd read the 100 records that the procedure returns.
dataReader.Close(); //or surround dataReader with using statement.
var myOutputValue = sqlCommand.Parameters["@paramC"].Value;
答案
添加具有输出方向的命令参数。
using (var sqlCommand = _myfactory.CreateCommand(sqlConnection, _myfactory.GetParameters(procedureParameters)))
sqlCommand.Parameters.Add("@paramC", SqlDbType.VarChar, 100);
sqlCommand.Parameters["@paramC"].Direction = ParameterDirection.Output;
var dataReader = sqlCommand.ExecuteReader();
while (dataReader.Read())
var paramC= Convert.ToString(cmd.Parameters["@paramC"].Value);
以上是关于C#-使用SqlDataReader读取过程的输出参数[duplicate]的主要内容,如果未能解决你的问题,请参考以下文章
C#使用SqlDataReader读取数据库数据时CommandBehavior.CloseConnection参数的作用
如何在 JavaScript 中使用 C# SQLDataReader 对象