問題は単純化されました:
いくつかのデータテーブルを含むDataSetがあります...データテーブルの1つにバインドされたWinformsDataGridがあります。ユーザーは、DataGridを介して、いくつかの行を上記のデータテーブルに貼り付けます。たとえば、3行とします。
これで、3つの行すべてにRowState=DataRowState.Addedがあります。
ここで、sqlserverトランザクションを開始します。
次に、dataAdapter1.Update(dataSet1)を呼び出して、行をSqlServerに更新します。行1..OK行2..OK行3..sqlserverレベルでのエラー(設計上、一意のインデックスを適用しました)
このエラーを検出したら、sqlserverトランザクションをロールバックします。
また、Dataset1.RejectChanges()および/またはDatatable1.RejectChanges()のいずれかを使用して、データテーブル/データセットの変更を「ロールバック」しようとします。
問題は、.RejectChanges()が私が想定したように機能することではありません。私のデータテーブルには2つの行(row1、row2)があり、そのRowState = DataRowState.Unchanged; row3は完全に消えました。
私がしたいのは、sqlserverトランザクションをロールバックするときに、dataAdapter1.Update()メソッドを呼び出す直前にデータテーブルの3行すべてが同じ状態のままになることです。
(理由は、ユーザーがバインドされたDataGridのエラーを確認し、修正アクションを実行して、更新を再試行できるようにするためです)。
誰かアイデアはありますか?つまり、ADOdataTableレベルで状態をロールバックするのと同等のものを探しています。