3

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

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

我尝试使用消息框显示值,numbers但结果始终为 0。表 cars 包含 5 条记录。那么为什么我没有得到正确的结果呢?...

4

5 回答 5

4

对于匿名投票者,OP 的关键部分:

我尝试使用消息框显示数字的值,但结果始终为 0。表 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();
于 2011-10-14T16:21:50.320 回答
1

尝试使用应该给你计数的 ExecuteScalar。ExecuteNonQuery 不会从您的查询中返回结果。您查看的返回值表明您的语句影响了多少行,在您的情况下为零。

于 2011-10-14T16:21:48.520 回答
1

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

于 2011-10-14T16:24:46.983 回答
0

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

于 2011-10-14T16:22:27.463 回答
0

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++;
}
于 2011-10-14T16:22:37.183 回答