c# ExecuteNonQuery总是返回0

本文关键字:返回 ExecuteNonQuery | 更新日期: 2023-09-27 18:11:29

我认为连接没有问题,因为当我打开它时,它不会抛出任何错误。我猜错误是在执行命令的时候。这是我的代码:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM cars", conn);
cmd.CommandType = CommandType.Text;
int numbers = cmd.ExecuteNonQuery();

我尝试使用消息框来显示numbers的值,但结果总是0。table cars包含5条记录。那么为什么我没有得到正确的结果?…

c# ExecuteNonQuery总是返回0

致匿名的反对者,OP的关键部分:

我尝试使用消息框来显示数字的值,但是结果总是0。table cars包含5条记录。那我为什么没有呢得到正确的结果?…

OP显然试图获得表中记录的计数(标量聚合),而不是所有表数据。

我的回答:

这是因为你的查询返回一个表,而不是一个标量值,你调用了不正确的函数。你的查询应该是:

"SELECT COUNT(*) FROM cars"

而ExecuteNonQuery实际上并不期望返回任何结果。(通常使用ExecuteNonQuery执行插入、更新和删除操作。)你应该使用ExecuteScalar,它需要一个单值的结果,比如count(*)。

现在都在一起了:

OleDbCommand cmd = new OleDbCommand("SELECT count(*) FROM cars", conn);
cmd.CommandType = CommandType.Text;
int numbers = cmd.ExecuteScalar();

尝试使用ExecuteScalar,它应该会给您计数。ExecuteNonQuery不返回查询的结果。您查看的返回值表示语句影响了多少行,在本例中为0。

ExecuteNonQuery并不进行查询。它通常用于插入或更新,并返回受影响记录的数量。对于您提供的查询,您应该使用ExecuteReader或DataAdapter及其Fill方法来填充数据表。

因为您正在执行查询,而ExecuteNonQuery返回受影响的行数,当您选择时始终为0,因为您没有更改任何内容(即:INSERT,UPDATE或DELETE)

ExecuteNonQuery仅返回UPDATE、DELETE或INSERT操作所影响的行数。对于SELECT语句中的行数,请尝试:

OleDbCommand cmd = new OleDbCommand("SELECT * FROM cars", conn);
OleDbDataReader reader = cmd.ExecuteReader();
int numbers = 0;
while (reader.Read())
{
    //// other Reader-related operations here...
    numbers++;
}