受此声明影响的记录数

时间:2011-09-06 19:34:04

标签: c# sql-server visual-studio

如何获取受此声明影响的记录数量:

select * from x_table where column1 = 5

我认为ExecuteNonQuery是我需要的,但它返回-1。我预计2,因为我的表中有column1 = 5的两条记录。我如何获得正确的计数?

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)

您需要使用ExecuteScalarExecuteReaderExecuteNonQuery返回受插入,更新或删除操作影响的行数,而不是选择。

使用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。

From the documentation

  

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