1

在 SQL Server 中,我可以将值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赋值抛出错误

指定的演员表无效

我哪里错了?

4

1 回答 1

8

存储过程将 null 作为计算结果分配给输出参数,因为它被指定为仅输出。

实际参数方向为输入输出:

cmd.Parameters["@myOutputParam"].Direction = ParameterDirection.InputOutput;
于 2017-09-20T06:51:34.357 回答