我正在调试数据库操作代码,我发现正确的 UPDATE 从未发生,尽管代码从未失败过。这是代码:
condb.Open();
OleDbCommand dbcom = new OleDbCommand("UPDATE Word SET word=?,sentence=?,mp3=? WHERE id=? AND exercise_id=?", condb);
dbcom.Parameters.AddWithValue("id", wd.ID);
dbcom.Parameters.AddWithValue("exercise_id", wd.ExID);
dbcom.Parameters.AddWithValue("word", wd.Name);
dbcom.Parameters.AddWithValue("sentence", wd.Sentence);
dbcom.Parameters.AddWithValue("mp3", wd.Mp3);
但经过一些调整后,这奏效了:
condb.Open();
OleDbCommand dbcom = new OleDbCommand("UPDATE Word SET word=?,sentence=?,mp3=? WHERE id=? AND exercise_id=?", condb);
dbcom.Parameters.AddWithValue("word", wd.Name);
dbcom.Parameters.AddWithValue("sentence", wd.Sentence);
dbcom.Parameters.AddWithValue("mp3", wd.Mp3);
dbcom.Parameters.AddWithValue("id", wd.ID);
dbcom.Parameters.AddWithValue("exercise_id", wd.ExID);
为什么在 OleDb 连接的情况下必须将 WHERE 子句中的参数放在最后一个如此重要?之前使用过 MySQL,我可以(并且通常会)首先编写 WHERE 子句的参数,因为这对我来说更合乎逻辑。
一般查询数据库时参数顺序是否重要?一些性能问题还是什么?
对于 DB2、Sqlite 等其他数据库,是否需要维护特定的顺序?
更新:我删除?
并包含了带有和不带有@
. 顺序真的很重要。在这两种情况下,只有最后提到 WHERE 子句参数时,才会发生实际更新。更糟糕的是,在复杂的查询中,我们很难知道 Access 期望哪个顺序,并且在所有顺序发生更改的情况下,查询都不会在没有警告/错误的情况下完成其预期的任务!