繁体   English   中英

初始化存储过程输出参数

[英]Initializing stored procedure output parameter

我有一个简单的SQL Server存储过程:

ALTER PROCEDURE GetRowCount

(
@count int=0 OUTPUT
)

AS
Select * from Emp where age>30;
SET @count=@count+@@ROWCOUNT;

RETURN

我正在尝试初始化并访问以下C#代码中的输出参数:

SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=answers;Integrated Security=True";

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;

cmd.CommandText = "GetRowCount";
cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int));
cmd.Parameters["@count"].Direction = ParameterDirection.Output;
con.Open();
cmd.Parameters["@count"].Value=5;
cmd.ExecuteNonQuery();

int ans = (int)(cmd.Parameters["@count"].Value);
Console.WriteLine(ans);

但是在运行代码时,会在代码的倒数第二行抛出InvalidCastException (我调试并检查了Value属性中没有返回任何内容)。

如何在代码中正确初始化输出参数? 提前致谢!

您需要将ParameterDirection更改为ParameterDirection.InputOutput

看看这里的示例: 如何从过程sql server 2005获取返回值到c#

您不必初始化output参数。 使用ParameterDirection.InputOutput将值传递给存储过程。

类型异常的最可能原因是该过程返回DBNull.Value 您可以测试如下:

var ans = cmd.Parameters["@count"].Value as int?;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM