ExecuteScalarAsync() 不 return 来自存储过程的相同值 return
ExecuteScalarAsync() does not return the same value returned from stored procedure
我有一个存储过程 return 一个正整数或 -1。
我有这个代码调用存储过程,但我不知道为什么它无法从存储过程
中捕获值 returned
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
上面的代码总是 return 0。我在这里读了一篇建议查看 return 数据类型的帖子。所以我在 ExecuteScalarAsync 之后删除并在 Watch window 中查找变量 ret,它是一个空对象。连接字符串是正确的,它在调用后连接到正确的数据库,数据按预期更新。我什至尝试删除存储过程中除 RETURN -1 之外的所有内容,但我仍然从 ExecuteScalarAsync 中得到 0。
我这里做错了什么?
在您的存储过程中删除此 SET NOCOUNT ON
以获得 @@ROWCOUNT
的正确值。
更多详情请查看此SET NOCOUNT (Transact-SQL)
不要使用 RETURN -1
,而是使用 SELECT -1
。标量值是一个类似于 table 的结果,具有单个值(1 行 1 列)。
我有一个存储过程 return 一个正整数或 -1。 我有这个代码调用存储过程,但我不知道为什么它无法从存储过程
中捕获值 returned 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
上面的代码总是 return 0。我在这里读了一篇建议查看 return 数据类型的帖子。所以我在 ExecuteScalarAsync 之后删除并在 Watch window 中查找变量 ret,它是一个空对象。连接字符串是正确的,它在调用后连接到正确的数据库,数据按预期更新。我什至尝试删除存储过程中除 RETURN -1 之外的所有内容,但我仍然从 ExecuteScalarAsync 中得到 0。
我这里做错了什么?
在您的存储过程中删除此 SET NOCOUNT ON
以获得 @@ROWCOUNT
的正确值。
更多详情请查看此SET NOCOUNT (Transact-SQL)
不要使用 RETURN -1
,而是使用 SELECT -1
。标量值是一个类似于 table 的结果,具有单个值(1 行 1 列)。