如何使用 Dapper 检索存储过程返回值

Mat*_*t W 4 t-sql sql-server dapper

我有一个这种形式的存储过程:

CREATE PROCEDURE AddProduct
    (@ProductID varchar(10),
     @Name  nvarchar(150)
    )
AS
    SET NOCOUNT ON;

    IF EXISTS (SELECT TOP 1 ProductID FROM Products 
               WHERE ProductID = @ProductID)
        RETURN -11
    ELSE
    BEGIN
        INSERT INTO Products ([AgentID], [Name])
        VALUES (@AgentID, @Name)

        RETURN @@ERROR
    END
Run Code Online (Sandbox Code Playgroud)

我有这个 C# 来调用存储过程,但我似乎无法从中获得正确的值:

var returnCode = cn.Query(
    sql: "AddProduct",
    param: new { @ProductID = prodId, @Name = name },
    commandType: CommandType.StoredProcedure);
Run Code Online (Sandbox Code Playgroud)

如何确保returnCode变量包含从RETURN -11RETURN @@ERROR行返回的值?

Mat*_*t W 10

为了能够在 SQL 中使用该RETURN语句,C# 变为...

var _params = new DynamicParameters{ @ProductID = prodId, @Name = name };
_params.Add(
    name: "@RetVal",
    dbType: DbType.Int32,
    direction: ParameterDirection.ReturnValue
    );
var returnCode = cn.Execute(
    sql: "AddProduct",
    param: _params,
    commandType: CommandType.StoredProcedure);
return _params.Get<int>("@RetVal");
Run Code Online (Sandbox Code Playgroud)

这不是我所希望的实现,但它确实有效。