我之前使用过此方法来返回更改的行数。我是运行插入方法,插入在存储过程中运行良好,但是
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;
为什么我得到 -1 而不是实际更改的行数?
如果您使用此方法调用执行的存储过程 在表中 UPDATE/INSERT 如果存储的过程返回 -1 SET NOCOUNT 为 ON 值。
--来源
来自微软:
对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受触发器影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,返回值也是-1。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx
您可能会得到 -1,因为您正在使用存储过程而不是直接表更改
您从存储过程返回什么值?你能显示你的存储过程的代码吗?您可能需要编辑存储过程以返回所需的值,或者,您的存储过程专门返回 -1,或者存储过程返回的变量的值为 -1。
从存储过程中获取行计数输出,类似于使用
@rowCount=@@Rowcount
。在 DAL 中,使用 dbManager.AddOutParameter("RowCount", DbType.Int32, rowCount);
然后在最后几行中您将得到 (int)dbManager.GetParameterValue("RowCount")
。