型指定されたデータセットと を使用して、データベースの 9 つのテーブルからすべてのデータを削除する関数を使用していますadaptermanager.UpdateAll
。DBConcurrencyException
1 つのテーブルが をスローするため、更新は で失敗しますRowNotInTableException
。私がやっているのは、すべてのテーブルを埋めてから行を削除することだけです。データベースで動作する他のプロセスはありません。行を分離するにはどうすればよいですか? 問題を引き起こしている行の主キーを取得する方法はありますか?
私のコード(短縮):
--- 6 other fills before
FillDataTable("parameters");
List<AzureDataSet.parametersRow> parRows = (from p in azureDataSet.parameters where p.ID != "undefined" select p).ToList();
foreach (AzureDataSet.parametersRow item in parRows)
item.Delete();
FillDataTable("definitions");
List<AzureDataSet.definitionsRow> defRows = (from sd in azureDataSet.definitions where sd.hashPK != "undefined" select sd).ToList();
foreach (AzureDataSet.definitionsRow item in defRows)
item.Delete();
--- definitions table produces the error, there is only one more table to fill left
AzureDataSetTableAdapters.TableAdapterManager adapterManager = new AzureDataSetTableAdapters.TableAdapterManager();
adapterManager.parametersTableAdapter = new AzureDataSetTableAdapters.parametersTableAdapter();
adapterManager.definitionsTableAdapter = new AzureDataSetTableAdapters.definitionsTableAdapter();
adapterManager.BackupDataSetBeforeUpdate = true;
retryPolicy.ExecuteAction(() =>
{
adapterManager.UpdateAll(azureDataSet);
});
- 編集 -
adapterManager の外で削除操作をテストしました。TableAdapter.Update
そのため、すべてのメソッドを個別に呼び出しました。同じテーブルで次のエラーがスローされます。
スタックトレース:
System.Data.DBConcurrencyException
bei System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
bei System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
bei System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
bei System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
bei System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
bei Apcs.Pcd.NetLib.AzureDataSetTableAdapters.definitionsTableAdapter.Update(AzureDataSet dataSet) in ..\AzureDataSet.Designer.cs:Zeile 21172.
bei ..DeleteAllDatabaseData() in ..:Zeile 2540.
-- 編集 2: 解決済み --
問題を解決できましたが、何が問題を引き起こしたのかわかりません。私がしたことは、DataSet.xsd を開いて、テーブルの削除コマンドを開いて、DataSet を再度保存することだけでした。私は何も変えなかった!