我在使用DataTable時發現了這個錯誤。 我向DataTable添加了主鍵列,而不是向該表中添加了一行,刪除了該行,並向表中添加了具有相同鍵的行。這工作。當我試圖打電話給RejectChanges()
時,我得到ConstraintException
表示價值已經存在。 這裏是例子:DataTable在RejectChanges上拋出異常
var dataTable = new DataTable();
var column = new DataColumn("ID", typeof(decimal));
dataTable.Columns.Add(column);
dataTable.PrimaryKey = new [] {column };
decimal id = 1;
var oldRow = dataTable.NewRow();
oldRow[column] = id;
dataTable.Rows.Add(oldRow);
dataTable.AcceptChanges();
oldRow.Delete();
var newRow = dataTable.NewRow();
newRow[column] = id;
dataTable.Rows.Add(newRow);
dataTable.RejectChanges(); // This is where it crashes
我認爲,因爲行被刪除,例外不應隨意(約束沒有違反,因爲行處於刪除狀態)。我能做些什麼嗎?任何幫助表示讚賞。
這是類似的東西,但我不認爲它應該以相反的順序回滾。它應該首先拒絕「未刪除」行上的更改,而不是刪除。 – Vale 2012-03-19 10:05:01
第二個解決方法將起作用(但您如何禁用約束)。首先不是一個通用的解決方案,因爲用戶可以刪除最後一行,而不是更改前一行的id。 – Vale 2012-03-19 10:21:01
@Vale:編輯我的答案,顯示如何強制執行正確的回滾順序。 – 2012-03-19 10:23:05