Команда ОБНОВЛЕНИЯ не обновляет данные

#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 но имя объявления и определения должно быть одинаковым. Увидимся в первой части