sql-server - 如何使用 Dapper 检索存储过程的返回值

标签 sql-server tsql 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

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

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

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

最佳答案

为了在 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");

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

关于sql-server - 如何使用 Dapper 检索存储过程的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44045844/

相关文章:

python - 将数据框传递给 pandas 中的 SQL 时,如何检查记录是否存在?

sql-server - 如何从文件路径中提取文件名

sql - 调整 mysql 查询以获得更好的性能

orm - 有关于小巧 Dapper 文件吗?

c# - 将 Query<T, ..> 扩展到超过 7 种类型

sql-server - Nhibernate:如何找到SqlDateTime溢出异常的负责字段

c# - 是什么导致了 MSSQL 中的错误 "Operation on non-blocking socket would block"?

java - 从 jetty 服务器发出 SQL 请求时如何修复此 SSL 错误

c# - Dapper 错误将 tinyint 解析为短?

sql-server - 使用系统存储过程的结果作为可查询表