2013-05-23 2 views
0

Я написал набор кодов с использованием команды SQL для удаления и обновления записей Access через программу C#. Вот набор кодов:SQL Delete and Update не удалял и не обновлял

Update

OleDbCommand cmd = new OleDbCommand("UPDATE Available SET Status = 'AVAILABLE' WHERE AvailableID = ?", cnn); 
cmd.Parameters.Add(new OleDbParameter { Value = id.AvailableID }); 
cmd.CommandType = CommandType.Text; 
cnn.Open(); 
cmd.ExecuteNonQuery(); 
cnn.Close(); 

Удалить

OleDbCommand cmd = new OleDbCommand("DELETE FROM Log WHERE LogID = ?", cnn); 
cmd.Parameters.Add(new OleDbParameter { Value = l.LogID }); 
cmd.CommandType = CommandType.Text; 
cnn.Open(); 
cmd.ExecuteNonQuery(); 
cnn.Close(); 

Программа является исполняемым. Когда я пытаюсь удалить и обновить записи, запись обновления не была обновлена, и удаление записи все еще существует.

enter image description here

Нажатие кнопки удаления удаляет запись в журнале и обновляет продукт в «доступные». Однако статус не изменился, и запись не удалялась.

enter image description here

enter image description here

ли я что-то отсутствует? Я всегда обновляю каждую транзакцию.

+0

Да, заметили splitsecond сразу после публикации - я удалил комментарий :) .. но транзакция? где транзакция? Вы это совершаете? –

+0

@retailcoder Нет явной транзакции. Каждый оператор имеет неявную транзакцию. – ErikE

+0

@ErikE действительно? Я только что узнал, спасибо! По 'statement' вы имеете в виду' command' правильно? Это также относится к командам, выполняемым в отношении соединений SQL Server? –

ответ

1

Это странно. Вот мои рекомендации:

  1. Убедитесь, что вы случайно не проглотили ошибку. Вы можете сделать это, выполнив код и проверив, что он не перейдет к обработчику catch. Имейте в виду, что это может быть где-то еще далеко от местоположения кода, который вы опубликовали. Просто зависит от того, как он был настроен.
  2. Убедитесь, что параметры являются правильными значениями, жестко кодируя весь запрос с помощью LogID. Хотя их лучше использовать, параметры иногда ведут себя так, как вы этого не ожидали. Прошло некоторое время с тех пор, как я использовал динамический SQL, но не в своей голове. Я не вижу ничего плохого в вашем коде.

Как в сторону, я бы рекомендовал сделать переключатель в ORM. Динамический SQL очень сложно управлять в крупных проектах, и, следовательно, лучше с ним справиться, даже когда ваш проект мал. Он также заботится о любых синтаксических различиях, которые могут возникнуть, если вы когда-либо порт приложения для использования базы данных MSSQL в будущем. Лично я рекомендую nHibernate.

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