我有一个简单的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属性中没有返回任何内容)。
如何在代码中正确初始化输出参数?提前谢谢!
答案 0 :(得分:6)
您需要将ParameterDirection更改为ParameterDirection.InputOutput
点击此处查看示例:how to get return value from procedure sql server 2005 to c#
答案 1 :(得分:1)
您不必初始化output
参数。使用ParameterDirection.InputOutput
将值传递给存储过程。
类型异常的最可能原因是该过程返回DBNull.Value
。你可以测试它:
var ans = cmd.Parameters["@count"].Value as int?;