ExecuteScalarAsync() 不返回从存储过程返回的相同值

问题描述

我有一个返回正整数或 -1 的存储过程。 我有这段代码调用该存储过程,但我不知道为什么它无法捕获从存储过程返回的值

system("pdftk test1.pdf stamp stamp.pdf output test1S.pdf")

存储过程

    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();
    }

上面的代码总是返回 0。我读过这里的一篇文章,建议看看返回数据类型是什么。所以我在 ExecuteScalarasync 之后删除并在 Watch 窗口中查找变量 ret ,它是一个空对象。连接字符串是正确的,并且在调用后连接到正确的数据库,数据按预期更新。我什至试图删除存储过程中除 RETURN -1 之外的所有内容,但我仍然从 ExecuteScalarasync 中得到 0。

在这里做错了什么?

解决方法

在您的存储过程中删除此 SET NOCOUNT ON 以获得正确的 @@ROWCOUNT 值。

有关详细信息,请查看此SET NOCOUNT (Transact-SQL)

不要使用RETURN -1,而是使用SELECT -1。标量值是一个类似表格的结果,带有单个值(1 行 1 列)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...