c#:ExecuteNonQuery()返回-1

Fun*_*nky 11 c# executenonquery

我之前使用过这种方法来返回更改的行数.我是运行insert方法,插入在存储过程中运行正常,但ExecuteNonQuery的返回值始终返回-1.

这是我的C#代码:

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;
Run Code Online (Sandbox Code Playgroud)

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

kol*_*kol 24

如果使用此方法调用在表中执行UPDATE/INSERT的存储过程,则如果存储的procudere的SET NOCOUNT为ON值,则该方法返回-1.

- 来源


Mic*_*uso 8

来自微软:

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

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

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