c#:ExecuteNonQuery()返回-1

c#:ExecuteNonQuery()返回-1,c#,executenonquery,C#,Executenonquery,我以前使用过这个方法来返回更改的行数。如果要运行insert方法,insert在存储过程中可以正常运行,但是来自ExecuteOnQuery的返回值总是返回-1 这是我的C#代码: 为什么我得到的是-1而不是实际更改的行数 如果使用此方法调用执行以下操作的存储过程 更新/在表中插入方法,如果存储的进程 将NOCOUNT设置为ON值 --来自Microsoft: 对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括受插入或更新操作影

我以前使用过这个方法来返回更改的行数。如果要运行insert方法,insert在存储过程中可以正常运行,但是来自ExecuteOnQuery的返回值总是返回-1

这是我的C#代码:

为什么我得到的是-1而不是实际更改的行数

如果使用此方法调用执行以下操作的存储过程 更新/在表中插入方法,如果存储的进程 将NOCOUNT设置为ON值

--

来自Microsoft:

对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受触发器影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也是-1


您可能会得到-1,因为您使用的是存储过程而不是直接的表更改

存储过程返回的值是多少?能否显示存储过程的代码。您可能需要编辑存储过程以返回所需的值,或者存储过程返回的是-1,或者存储过程返回的变量的值为-1。

从存储过程获取行计数输出,类似于使用
@rowCount=@@rowCount
。在DAL中,使用dbManager.AddOutParameter(“RowCount”,DbType.Int32,RowCount)然后在最后一行中,您将得到
(int)dbManager.GetParameterValue(“RowCount”)

,因此表中的修改实际上发生了,但您得到的是-1?它可能会返回存储过程返回的任何内容,如果没有另外指定,它可能是-1。您是否实际使用探查器捕获了SQL调用并手动执行以查看实际更改的行号?存储过程的代码在哪里?可能的重复
int ret = 0;

using (SqlConnection conn = new SqlConnection(this.ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand(QueryName, conn))
    {
        conn.Open();

        if (Params != null)
            cmd.Parameters.AddRange(Params);

        cmd.CommandType = CommandType.StoredProcedure;

        ret = cmd.ExecuteNonQuery();

        conn.Close();
    }
}

return ret;