![](/img/trans.png)
[英]Store update, insert, or delete statement affected an unexpected number of rows
[英]Number Of Records Affected With This Statement
如何获取受此声明影响的记录数:
select * from x_table where column1 = 5
我认为ExecuteNonQuery
是我需要的,但它返回-1。 我期待2,因为我的表中有两个记录,其中column1 = 5
。 我如何获得正确的计数?
你正在调用ExecuteNonQuery
- 但这是一个查询! 没有行会受到您的语句的影响 ,因为它只是一个查询。 您需要将计数部分放入查询中,如下所示:
select count(*) from x_table where column1 = 5
然后获得结果的最简单方法是使用ExecuteScalar
:
int count = (int) command.ExecuteScalar();
您可以将其作为读者执行并获得唯一的结果,但ExecuteScalar
更简单。
select count(*) from x_table where column1=5
将其作为普通查询执行。 结果将是一行,其中一列包含匹配记录的数量。
您需要使用ExecuteScalar
或ExecuteReader
。 ExecuteNonQuery
返回受插入,更新或删除操作影响的行数,而不是select。
使用SELECT COUNT(1) FROM X_TABLE WHERE COLUMN1=5
很好,但执行它为int rows = Convert.ToInt32(command.ExecuteScalar());
从SQL的角度来看,这就是你所需要的
select count(*) from x_table where column1=5
我不确定是否有使用Linq或其他东西的快捷方式。
只是为了澄清为什么你得到-1。
对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。 当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数。 对于所有其他类型的语句,返回值为-1 。 如果发生回滚,则返回值也为-1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.