В моем приложении у меня есть элемент управления, который отображает содержимое таблицы базы данных пользователю. Этот элемент управления содержит данные для отображения в System.Data.DataSet
объекте. Пользователь может изменять данные, отображаемые в элементе управления, и эти данные затем возвращаются в базу данных, когда пользователь завершает работу.
Проблемы возникают, когда данные в таблице базы данных изменяются каким-либо внешним процессом (например, некоторые строки были обновлены), когда пользователь вносит изменения в элемент управления. Игнорируя вопрос о правильности данных на данный момент, я хотел бы зафиксировать изменения, внесенные пользователем в элемент управления, и перезаписать изменения, сделанные этим внешним процессом.
Я использую SqlDataAdapter
для обновления базы данных. В описанных случаях использования, когда базовая таблица базы данных не была изменена внешним процессом, SqlDataAdapter.Update
работает как ожидалось. Однако в сценарии, когда какой-то внешний процесс поиграл с таблицей, когда пользователь ее редактировал, SqlDataAdapter.Update
не выдает исключение, а возвращает 0, указывая, что строки не были обновлены. Я проверил, что строки в моем наборе данных имеют правильные данные и RowState
(т.е. DataRowState.Modified
), поэтому я знаю, что данные, которые я передаю в метод SqlDataAdapter.Update
, верны.
Полагаю, в моем вопросе есть две части.
- Почему
SqlDataAdapter.Update
не обновляет базу данных указанным набором данных?
- Почему он молча терпит неудачу?
Я прочитал эту запись в блоге , и мой код нигде не вызывает AcceptChanges
, и, как я уже говорил выше, я проверил DataSet
RowState
, поэтому я знаю, что строки правильно помечены как имеющие измененные данные.