用c#写入输出参数
Write to output parameter with c#
在 SQL 服务器中,我可以将值 IN 传递给存储过程输出参数,更改它,然后读回它:
CREATE PROCEDURE [dbo].[testSP]
@myOutputParam INT OUTPUT
AS
BEGIN
SELECT @myOutputParam = @myOutputParam + 1
END
GO
DECLARE @x int = 1
EXEC testSP @myOutputParam = @x OUTPUT
PRINT @x -- prints: 2
但是,当我尝试从 C# 执行此操作时,它不起作用:
using (SqlConnection db = new SqlConnection("..."))
using (SqlCommand cmd = new SqlCommand("testSP", db))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@myOutputParam", SqlDbType.Int).Value = (int)1;
cmd.Parameters["@myOutputParam"].Direction = ParameterDirection.Output;
db.Open();
int rowsAffected = cmd.ExecuteNonQuery();
int x = (int)cmd.Parameters["@myOutputParam"].Value;
}
最终的 int x
赋值会引发错误
Specified cast is not valid
我哪里错了?
存储过程将 null 作为计算结果分配给输出参数,因为它被指定为仅输出。
实参方向为输入输出:
cmd.Parameters["@myOutputParam"].Direction = ParameterDirection.InputOutput;
在 SQL 服务器中,我可以将值 IN 传递给存储过程输出参数,更改它,然后读回它:
CREATE PROCEDURE [dbo].[testSP]
@myOutputParam INT OUTPUT
AS
BEGIN
SELECT @myOutputParam = @myOutputParam + 1
END
GO
DECLARE @x int = 1
EXEC testSP @myOutputParam = @x OUTPUT
PRINT @x -- prints: 2
但是,当我尝试从 C# 执行此操作时,它不起作用:
using (SqlConnection db = new SqlConnection("..."))
using (SqlCommand cmd = new SqlCommand("testSP", db))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@myOutputParam", SqlDbType.Int).Value = (int)1;
cmd.Parameters["@myOutputParam"].Direction = ParameterDirection.Output;
db.Open();
int rowsAffected = cmd.ExecuteNonQuery();
int x = (int)cmd.Parameters["@myOutputParam"].Value;
}
最终的 int x
赋值会引发错误
Specified cast is not valid
我哪里错了?
存储过程将 null 作为计算结果分配给输出参数,因为它被指定为仅输出。
实参方向为输入输出:
cmd.Parameters["@myOutputParam"].Direction = ParameterDirection.InputOutput;