使用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()来获取计数吗?"
您可以使用它,但是结果集是一组行。
为了获得更好的性能,你应该使用Select Count(whatever) ....
,然后使用只返回一个值的ExecuteScalar,在本例中是Count()的结果。
执行查询,并返回查询返回的结果集中第一行的第一列。其他列或行将被忽略。
ExecuteScalar on msdn
您可能会发现您正在使用的底层驱动程序碰巧支持此操作。如果你换一个不同的驱动程序,我不会假设同样的行为。
http://en.wikipedia.org/wiki/ODBC由于不同的技术具有不同的功能,大多数ODBC驱动程序并不实现ODBC标准中定义的所有功能。一些驱动程序提供了标准未定义的额外功能。