Я отлаживал код операции с базой данных, и я обнаружил, что надлежащего 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);
-
Почему так важно, чтобы параметрам в предложении WHERE было дано последнее в случае соединения OleDb? Работая с MySQL ранее, я мог (и обычно делать) сначала записывать параметры предложения WHERE, потому что это более логично для меня.
-
Является ли порядок параметров важным при запросе базы данных в целом? Некоторые проблемы производительности или что-то еще?
-
Существует ли конкретный порядок поддержки в случае других баз данных, таких как DB2, Sqlite и т.д.
Обновление: Я избавился от ?
и включил собственные имена с и без @
. Порядок действительно важен. В обоих случаях только когда упоминались параметры предложения WHERE, произошло фактическое обновление. Чтобы усугубить материю, в сложных запросах, трудно понять, какой заказ является ожиданием доступа, и во всех ситуациях, когда порядок изменен, запрос не выполняет свою предполагаемую работу без предупреждения/ошибки.