Это распространенное непонимание того, что делает метод AcceptChanges.
Я думаю, проблема возникает из исходного комментария в документации метода AcceptChanges
.
Выполняет все изменения, внесенные в эту таблицу с момента последнего Вызывается AcceptChanges.
Многие люди думают, что это означает, что «фиксируется в таблице базы данных», вместо этого он означает «фиксируется в экземпляре in-memory объекта данных».
Затем, следующий комментарий к документам, намекает на то, что на самом деле происходит там.
Когда вызывается AcceptChanges, любой объект DataRow, все еще находящийся в режиме редактирования , успешно завершает свои изменения. DataRowState также изменяется: все добавлены , а измененные строки становятся неизменными, а удаленные строки удаляются.
Итак, есть этот DataRow.RowState свойство, которое выражает то, что текущее состояние строки в памяти, принадлежащей к экземпляру в памяти из DataTable. И именно это состояние помогает методу DataAdapter.Update
в обнаружении того, что делать со строками.
Другими словами, метод Update решает обновить таблицу базы данных только для строк, которые не являются RowState==DataRowState.Unchanged
. Но вызов AcceptChanges «фиксирует» эти строки, и их состояние становится неизменным. Тогда нет обновления.
Удалить вызовы AcceptChanges. И – Steve
Также проверьте строку подключения. Используете ли вы 'пользовательский экземпляр' и/или' AttachDbFileName'? –
@Steve thx, это действительно работает! –