使用ExecuteNonQuery()方法获得选择行的计数或不?在c#.net

本文关键字:net ExecuteNonQuery 方法 选择 使用 | 更新日期: 2023-09-27 18:17:38

根据MSDN文章OdbcCommand。ExecuteNonQuery方法

定义如下:

对于UPDATE、INSERT和DELETE语句,返回值是受该命令影响的行数。对于所有其他类型的语句,返回值为-1。

(不支持SELECT语句)

这是我的示例代码在c# .net(我的数据库是PostgreSQL):

odbcCommand.CommandText = "SELECT key_id FROM sometable WHERE p1 = 1";
Console.WriteLine(odbcCommand.ExecuteNonQuery());

真的有用。它可以正确返回所选行的计数。

但是当我在stackoverflow中搜索一些文章时,例如:(ExecuteNonQuery()),(ExecuteNonQuery for SELECT sql语句返回无行)。

他们不建议使用ExecuteNonQuery()来获取所选行的计数,但建议使用ExecuteReader和loop来获取计数。(似乎ExecuteNonQuery()有时会得到错误的值?)

所以,我的问题是"我可以继续使用ExecuteNonQuery()来获取计数吗?"

使用ExecuteNonQuery()方法获得选择行的计数或不?在c#.net

您可以使用它,但是结果集是一组行。

为了获得更好的性能,你应该使用
Select Count(whatever) ....

,然后使用只返回一个值的ExecuteScalar,在本例中是Count()的结果。

执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。

ExecuteScalar on msdn

您可能会发现您正在使用的底层驱动程序碰巧支持此操作。如果你换一个不同的驱动程序,我不会假设同样的行为。

http://en.wikipedia.org/wiki/ODBC

由于不同的技术具有不同的功能,大多数ODBC驱动程序并不实现ODBC标准中定义的所有功能。一些驱动程序提供了标准未定义的额外功能。