【发布时间】:2021-07-01 02:46:17
【问题描述】:
我有一个返回正整数或 -1 的存储过程。 我有这个代码调用那个存储过程,我不知道为什么它不能捕获从存储过程返回的值
SqlConnection sqlConn = GetNewSqlConnection();
await sqlConn.OpenAsync();
try
{
var ret = await sqlConn.ExecuteScalarAsync<int>(
"dbo.Usp_Comment_Update",
new
{
CommentID_in = model.CommentID,
Comment_in = model.Comment,
CommentTypeID_in = model.CommentTypeID,
SortIndex_in = model.SortIndex,
UpdatedBy_in = model.UpdatedBy
},
commandType: CommandType.StoredProcedure);
return (int)ret;
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (sqlConn.State != ConnectionState.Closed)
{
sqlConn.Close();
}
sqlConn.Dispose();
}
存储过程
DECLARE @RowAffected INT
SET NOCOUNT ON;
UPDATE dbo.DB_Comments
SET [Comment] = @Comment_in
,[CommentTypeID] = @CommentTypeID_in
,[SortOrder] = @SortIndex_in
,[UpdatedBy] = @UpdatedBy_in
,[UpdatedDate] = GETDATE()
WHERE CommentID = @CommentID_in
SET @RowAffected = @@ROWCOUNT
PRINT @RowAffected
IF @RowAffected > 0
RETURN @RowAffected
ELSE
RETURN -1
上面的代码总是返回 0。我在这里读过一篇文章,建议看看返回数据类型是什么。所以我在 ExecuteScalarAsync 之后删除并在 Watch 窗口中查找变量 ret,它是一个空对象。连接字符串是正确的,它连接到正确的数据库,因为在调用之后,数据按预期更新。我什至尝试删除存储过程中除了 RETURN -1 之外的所有内容,但我仍然从 ExecuteScalarAsync 得到 0。
我做错了什么,在这里?
【问题讨论】:
-
你应该使用
parameters,见Getting return value from stored procedure in ADO.NET -
ExecuteNonQueryAsync应该为您提供正确的结果,对于此过程,尽管最佳实践就像给定的答案
标签: c# executescalar