厳密に型指定された DataSet の DataTable にいくつかの行を追加し、TableAdapterManager を使用して変更をデータベースに挿入します。TableAdapterManager の UpdateAll 関数を使用すると、挿入されたすべての行のデータベース ロールバックが失敗する場合があります。残念ながら、DataTable.RejectChanges は DataTable 内の同じ行を「ロールバック」しません。DataTable.RejectChanges メソッドの呼び出しでは、最後の行のみが DataTable から削除されます。DataSet をデータベースと同じステータスにしたい。
すべての新しい (コミットされていない) 行を削除する MSDN ドキュメントごとの RejectChanges ではありませんか? 私は何か間違ったことをしていますか?
私のコード:
foreach (var item in List)
{
DataSet.customerRow custRow = ds.customer.NewcustomerRow();
custRow.name = item.Name;
try
{
ds.customer.AddcustomerRow(custRow);
}
catch (Exception ex)
{
ProcessException(ex, System.Reflection.MethodBase.GetCurrentMethod().Name);
valid=false;
}
}
if (valid)
{
DataSetTableAdapters.TableAdapterManager adapterManager = new DataSetTableAdapters.TableAdapterManager();
adapterManager.customerTableAdapter = new DataSetTableAdapters.customerTableAdapter();
try
{
retryPolicy.ExecuteAction(() =>
{
adapterManager.UpdateAll(ds);
});
}
catch (Exception ex)
{
ds.customer.RejectChanges();
}
}
else
{
ds.customer.RejectChanges();
}