3

我有一个简单的 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的倒数第二行抛出了 an (我调试并检查了 Value 属性中没有返回任何内容)。

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

4

2 回答 2

6

您需要将 ParameterDirection 更改为ParameterDirection.InputOutput

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

于 2012-08-29T10:34:16.433 回答
1

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

类型异常最可能的原因是过程返回DBNull.Value。你可以像这样测试:

var ans = cmd.Parameters["@count"].Value as int?;
于 2012-08-29T10:38:09.590 回答