#c# #sql
#c# #sql
Вопрос:
У меня есть два oledbcommnd, используемых для обновления таблицы в базе данных.Один из них работает (добавление данных в пустые поля), но другой, предназначенный для очистки данных, не работает.Есть идеи?
Первое обновление commnd, которое работает (добавляет значения к пустым данным):
conn.Open();
OleDbDataAdapter adapter1 = new OleDbDataAdapter();
adapter3.UpdateCommand = conn.CreateCommand();
adapter3.UpdateCommand.CommandText = "UPDATE table SET Occup=Yes, Profesor=?";
adapter3.UpdateCommand.Parameters.AddWithValue("p1", "name");
adapter3.UpdateCommand.ExecuteNonQuery();
conn.Close();
Второй, который не работает (заменяет значения)
conn.Open();
OleDbDataAdapter adapter3 = new OleDbDataAdapter();
adapter3.UpdateCommand = conn.CreateCommand();
adapter3.UpdateCommand.CommandText = "UPDATE table SET Occup=No, Profesor=?";
adapter3.UpdateCommand.Parameters.AddWithValue("p1", "replace_prof_name");
adapter3.UpdateCommand.ExecuteNonQuery();
conn.Close();
При запуске второго кода я не получаю никаких ошибок. Я поставил счетчик, и он показывает правильное количество операций, но я не вижу изменений.
Комментарии:
1. Occup=No во втором примере, похоже, вызывает проблемы — «No» может быть зарезервированным словом sql, поэтому, если оно выполняется без какого-либо экранирования (например, Occup = ‘No’), тогда запрос может вести себя странно
2. вы ссылаетесь
adapter3
вместоadapter1
3. @tchrikch Это зарезервированное ключевое слово, но оно должно выдавать ошибку следующим образом:
"Incorrect syntax near by..."
. OP говорит, что он не получил никаких ошибок.
Ответ №1:
Вы ошибочно ссылаетесь adapter3
вместо adapter1
..
Попробуйте это
conn.Open();
OleDbDataAdapter adapter1 = new OleDbDataAdapter();
adapter1.UpdateCommand = conn.CreateCommand();
adapter1.UpdateCommand.CommandText = "UPDATE table SET Occup=Yes, Profesor=?";
adapter1.UpdateCommand.Parameters.AddWithValue("p1", "name");
adapter1.UpdateCommand.ExecuteNonQuery();
conn.Close();
conn.Open();
OleDbDataAdapter adapter3 = new OleDbDataAdapter();
adapter3.UpdateCommand = conn.CreateCommand();
adapter3.UpdateCommand.CommandText = "UPDATE table SET Occup=No, Profesor=?";
adapter3.UpdateCommand.Parameters.AddWithValue("p1", "replace_prof_name");
adapter3.UpdateCommand.ExecuteNonQuery();
conn.Close();
Комментарии:
1. Они не находятся в одной и той же функции, поэтому не имеет значения, какое имя я использую.
2. @yes но имя объявления и определения должно быть одинаковым. Увидимся в первой части