Sql server 如何使用Dapper检索存储过程返回值
我有一个这样的存储过程:Sql server 如何使用Dapper检索存储过程返回值,sql-server,tsql,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 ELS
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-11或RETURN@错误行返回的值?我建议您使用SELECT从存储过程返回值。此外,还应在dapper调用中指定返回类型:
RETURN -11
变成
SELECT -11
而简洁的电话变成了:
var returnCode = cn.Query<int>(..
我已经实现了这个模式好几次,它的工作原理与预期一样。我建议您使用SELECT从存储过程返回值。此外,还应在dapper调用中指定返回类型:
RETURN -11
变成
SELECT -11
而简洁的电话变成了:
var returnCode = cn.Query<int>(..
我已经实现了这个模式好几次,它的工作原理与预期的一样。为了在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中使用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");
这不是我所希望的实现,但它可以工作。不可能同时获得结果集和返回值,对吗?@MattW我尝试了这个解决方案,但它引发了一个异常,因为_参数中的参数比存储中的参数多。如何获得新的DynamicParameters{@ProductID=prodId,@Name=Name};有效的C语法?我刚刚得到一个错误“DynamicParameters不包含“ProductID”的定义。不可能同时获取结果集和返回值,对吗?@MattW我尝试了这个解决方案,但它引发了一个异常,因为_参数中的参数比存储中的参数多。如何创建新的DynamicParameters{@ProductID=prodId,@Name=Name};有效的C语法?我刚刚得到一个错误“DynamicParameters不包含“ProductID”的定义”。