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 列)。