前幾天我發佈了這個問題,但做了一個正確解釋問題的散列,所以希望這個嘗試更清晰。嘗試在我的Datasource(它是MYSQL數據庫)上使用C#MySQLDataAdapter.Update()函數時,我遇到了DBConcurrency錯誤。刪除行時與DataTable/Datasource autoincrement列同步的棘手問題
我在C#程序中操作的DataTable的源是我使用MySQLDataAdapter提取的數據庫中的表。我想操作行,然後使用DataAdapter的Update()函數將更改保存到數據庫。它在很大程度上運行良好,但我發現很難解決涉及自動增量列的問題。
比方說數據庫表中有像記錄的列表:
1 Apple
2 Orange
3 Banana
4 Pear
當第一ID列自動遞增。我可以使用MissingSchemaAction.AddWithKey()等方法填充DataTable並使其自動增量,如果向DataTable添加新記錄「Grapes」,自動增量ID列將爲5,數據庫將在我在其上運行Update()。但是,如果我將葡萄記錄添加到DataTable,然後刪除它,然後再次添加它(難以置信,我知道,但它發生了),DataTable自動增量只是保持滴答作響,所以現在看起來像這樣:
1 Apple
2 Orange
3 Banana
4 Pear
6 Grapes
如果我現在運行更新(),將「葡萄」記錄自動識別被保存到數據庫中的表5,因爲這是數據庫自動增量的,但在數據表中它的上市爲6 ,所以他們現在不同步,如果我從DataTable中刪除葡萄行並再次運行Update(),我得到錯誤:
"Concurrency violation: the DeleteCommand affected 0 of the expected 1 records."
在我的程序的Update()行上。
我環顧四周,看起來像這樣的去同步可以定期發生,但在這個階段,我想知道是否有任何我可以做的事情,而不回去和撕毀大部分代碼我寫了。
添加您自己的刪除命令/過程,並將其中存在if或檢測到您正在刪除的記錄未發佈並取消插入。 –
問題不在於我試圖刪除的記錄不存在,但問題是我試圖刪除的記錄在DataTable中具有autoID 6(例如),但是自動識別號碼爲5數據庫表,所以刪除命令正在尋找數據庫中的自動識別6,並沒有找到它(我認爲?) – NikonTC
你說你添加它然後刪除它,然後再次添加...除非你提交每個更改和刷新,排他鎖表格,或使用GetChanges和協調,這是永遠不會工作。插入的記錄的id不可能與底層的sql表一致,它是斷開的。 –