2013-08-29 3 views
3

Я пытаюсь использовать следующий скрипт для обновления значений в базе данных MS Access.C# MS Access oledbcommand.executeNonQuery UPDATE без ошибок, без изменений

Я проверил, что сгенерированный запрос действителен и работает, если я ввожу его в MS Access.

Также я проверил, что oledbcommand.executeNonQuery() возвращает правильное количество строк, которые необходимо изменить.

И, наконец, я не получаю ошибок, насколько мне известно.

Однако, когда я проверяю базу данных после запуска кода, изменений нет. Кто-нибудь знает, почему это может быть?

У меня есть другие функции, которые извлекают данные из базы данных, которые отлично работают с помощью команды oledb. Однако я не могу заставить его изменить базу данных.

Пожалуйста, не помните, что я знаю, что этот скрипт не защищает от инъекций, но это выходит за рамки этого вопроса. Я просто пытаюсь узнать, как обновить базу данных.

void IDatabase.UpdateRecordValue(string table, string updateColumn, string updateValue, string lookUpColumn, string lookUpValue) 
{ 
     connection.Open(); 
     OleDbCommand cmdUpdate = new OleDbCommand(); 

     string sqlQuery = "UPDATE [" + table + "] " + 
         "SET [" + table + "].[" + updateColumn + "] = '" + updateValue + "' " + 
         "WHERE [" + table + "].[" + lookUpColumn + "] = '" + lookUpValue + "';"; 

     cmdUpdate.CommandText = sqlQuery; 
     cmdUpdate.CommandType = CommandType.Text; 
     cmdUpdate.Connection = connection; 

     cmdUpdate.ExecuteNonQuery(); 
     connection.Close(); 
} 

EDIT: моя строка соединения выглядит следующим образом, нет никакого пароля в базе данных: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};"

EDIT Вот конкретный пример запроса, который я пробую использовать

UPDATE [Rooms] 
SET [Rooms].[Main Space Category] = '5' 
WHERE [Rooms].[Number] = '100'; 
+0

Настройки вашего проекта с использованием ожидаемого файла db? http://stackoverflow.com/a/13014788/77335 – HansUp

+0

Да, Ive также подтвердил, что другие функции, которые извлекают данные из базы данных, вытаскивают правильные данные. Он просто перестает работать, когда я пытаюсь обновить базу данных. – MichaelTaylor3D

+0

Является ли проблема ограничена этим «ОБНОВЛЕНИЕ»? Можете ли вы изменить любые данные ('INSERT',' DELETE') в этом db-файле из C#? – HansUp

ответ

0

У вас нет ошибок, если ваш код выполняет этот UPDATE, а cmdUpdate.ExecuteNonQuery() возвращает 1, как ожидалось.

UPDATE [Rooms] 
SET [Rooms].[Main Space Category] = '5' 
WHERE [Rooms].[Number] = '100'; 

Однако вы сообщаете, что db фактически не обновляется. Изучите этот пункт дальше. Попробуйте это SELECT из того же объекта соединения OleDB, который вы использовали при выполнении команды UPDATE.

SELECT [Rooms].[Main Space Category] 
FROM [Rooms] 
WHERE [Rooms].[Number] = '100'; 

Для дополнительной меры, перепроверить источник данных в ConnectionString свойства объекта Соединения.

Console.WriteLine(connection.ConnectionString) 
+0

Хорошо, я был в тупике ... Я выключил компьютер, немного отдохнул, а потом вернулся, чтобы хэшировать, и он работает. Я не думаю, что я что-то изменил. Я рад, что его работа сейчас, но это заставляет меня чувствовать себя неловко, что я не знаю, почему он не работал раньше, поэтому я могу предотвратить это в будущем. Единственное, о чем я могу думать, это то, что что-то блокировало базу данных только для чтения, которая не активизировалась при перезагрузке моего компьютера. Любые мысли по этому поводу? – MichaelTaylor3D

+0

Что вы видите из 'SELECT' я предложил --- старое или обновленное значение [Main Space Category]? – HansUp

+0

Он также возвратил правильное значение – MichaelTaylor3D

Смежные вопросы