我认为连接没什么问题,因为当我打开它时,它不会抛出任何错误。所以我猜错误是在我执行命令的时候。这是我的代码:
OleDbCommand cmd = new OleDbCommand("SELECT * FROM cars", conn);
cmd.CommandType = CommandType.Text;
int numbers = cmd.ExecuteNonQuery();
我尝试使用消息框显示numbers
的值,但结果始终为0.表车包含5条记录。那么为什么我没有得到正确的结果呢?..
答案 0 :(得分:4)
对于匿名的downvoter,OP的关键部分:
我尝试使用消息框来显示数字的值,但是 结果始终为0.表车包含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();
答案 1 :(得分:1)
尝试使用可以为您提供计数的ExecuteScalar。 ExecuteNonQuery不会返回查询结果。您查看的返回值表示您的语句影响了多少行,在您的情况下为零。
答案 2 :(得分:1)
ExecuteNonQuery,因为名称告诉您不进行查询。它通常用于插入或更新,并返回受影响的记录数。对于您提供的查询,您应该使用ExecuteReader或DataAdapter及其Fill方法来填充数据表。
答案 3 :(得分:0)
因为您正在执行查询,并且ExecuteNonQuery返回受影响的行数,当您选择时它总是0,因为您没有更改任何内容(即INSERT,UPDATE或DELETE)
答案 4 :(得分: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++;
}