我有这种形式的存储过程:
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 @@ERROR
行返回的值?
答案 0 :(得分:2)
为了在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");
这不是我希望的实现,但它确实有效。
答案 1 :(得分:1)
我建议您使用SELECT
返回存储过程中的值。您还应该在短小精悍的调用上指定返回类型:
RETURN -11
变为
SELECT -11
和短小精悍的电话变成:
var returnCode = cn.Query<int>(..
我已多次实现此模式,并且按预期工作。