如何获取受此声明影响的记录数量:
select * from x_table where column1 = 5
我认为ExecuteNonQuery
是我需要的,但它返回-1。我预计2,因为我的表中有column1 = 5
的两条记录。我如何获得正确的计数?
答案 0 :(得分:8)
您正在呼叫ExecuteNonQuery
- 但这是一个查询!您的语句没有影响行,因为它只是一个查询。您需要将计数部分放入查询中,如下所示:
select count(*) from x_table where column1 = 5
然后获得结果的最简单方法是使用ExecuteScalar
:
int count = (int) command.ExecuteScalar();
你可以只是作为读者执行它并获得唯一的结果,但ExecuteScalar
更简单。
答案 1 :(得分:7)
select count(*) from x_table where column1=5
将其作为普通查询执行。结果将是一行,其中一列包含匹配记录的数量。
答案 2 :(得分:4)
您需要使用ExecuteScalar
或ExecuteReader
。 ExecuteNonQuery
返回受插入,更新或删除操作影响的行数,而不是选择。
使用SELECT COUNT(1) FROM X_TABLE WHERE COLUMN1=5
很好,但执行它
int rows = Convert.ToInt32(command.ExecuteScalar());
答案 3 :(得分:1)
从SQL的角度来看,这就是你需要的全部内容
select count(*) from x_table where column1=5
我不确定是否有使用Linq或其他东西的快捷方式。
答案 4 :(得分:1)
只是澄清为什么你得到-1。
对于UPDATE,INSERT和DELETE语句,返回值为 受命令影响的行数。当a上存在触发器时 正在插入或更新的表,返回值包括数字 受插入或更新操作影响的行数和数字 受触发器或触发器影响的行数。 对于所有其他类型的语句,返回值为-1 。如果发生回滚,则返回 值也是-1。