Я опубликовал этот вопрос несколько дней назад, но попытался правильно объяснить проблему, поэтому, надеюсь, эта попытка будет более понятной.Я столкнулся с ошибкой DBConcurrency при попытке использовать функцию C # MySQLDataAdapter.Update () на моем источнике данных, который является базой данных MYSQL.
Источник таблицы данных, которой я манипулирую в моей программе на C #, представляет собой таблицув базе данных, которую я извлек, используя MySQLDataAdapter.Я хочу манипулировать строками, а затем использовать функцию Update () адаптера данных, чтобы сохранить изменения в базе данных.По большей части это работает хорошо, но я обнаружил одну трудную для решения проблему, связанную с автоинкрементными столбцами.
Допустим, в таблице базы данных есть список записей, например:
1 Apple
2 Orange
3 Banana
4 Pear
Гдепервый столбец идентификатора автоинкрементно.Я могу очень хорошо заполнить DataTable и выполнить автоинкремент с помощью MissingSchemaAction.AddWithKey () и т. Д., И если я добавлю новую запись "Grapes" в DataTable, столбец идентификатора автоинкремента будет равен 5, и база данных примет его, когда язапустите Update () для него.
Однако, если я добавлю запись Grapes в DataTable, затем удалю ее, а затем добавлю снова (неправдоподобно, но это случается), автоинкремент DataTable просто продолжает тикатьвверх, теперь это выглядит так:
1 Apple
2 Orange
3 Banana
4 Pear
6 Grapes
И если я сейчас запусту Update (), автоидентификатор записи "Grapes" будет сохранен в таблице DATABASE как 5, потому что там происходит автоинкремент базы данных.в, но в DataTable он указан как 6, поэтому они теперь не синхронизированы, и если я удаляю строку Grapes из DataTable и снова запускаю Update (), я получаю ошибку:
"Concurrency violation: the DeleteCommand affected 0 of the expected 1 records."
в строке Update () моей программы.
Я посмотрел вокруг, и кажется, что такого рода рассинхронизация может происходить довольно регулярно, но на этом этапе мне интересноg если я могу что-то сделать, не возвращаясь назад и не разрывая большую часть написанного мною кода.