2011-06-24 14 views
2

私はVB.NET 2.0でDataTablesを使用しています。マルチユーザ環境で発生すると予想される並行性違反を処理するコードを記述しています。並行性の違反をトラップする方法を理解していますが、DbCommandBuilderで生成されたINSERT、UPDATE、およびDELETEコマンドを使用している間にそれらを解決する方法を理解できません。.NETのデータテーブルで並行性違反を解決するにはどうすればよいですか?

同時実行違反が5つの異なる状況で発生するように私には思える

...

  1. 同時に持つ行を更新するデータベース
  2. に更新された行を更新しますデータベースから同時に削除された行
  3. データベースで同時に更新された行を削除する
  4. 矛盾している行を削除する現在、主キー同時に

私は状況1を解決する方法を知っているデータベースに挿入された行を挿入するデータベース

  • から削除します。 DataTable.Mergeメソッドを使用して更新された行を同期する方法のいくつかの例を見つけました。しかし、Mergeは他の4つの状況では機能していないようです。

    例として、データベースから同時に削除された行(状況2)を更新しようとしているとします。ビジネスルールは、更新された列の値でデータベースに行を復元するよう指示します。私は、Adapter.Updateメソッドが必要に応じて行をデータベースに挿入するように、DataRowプロパティを変更する方法を理解できません。マージはそれをしません。

    Mergeが状況1を処理することが容易であることを考えれば、他の並行性違反に対しても簡単な解決策が必要であり、私はそれらを見落としただけです。誰かが私に正しい方向のナッジを提供できますか?

    -TC

  • 答えて

    0

    アップデートしようとしている行が別のプロセスによって削除されました、そしてあなたはそれを復元する必要がある場合は、あなたが挿入して更新して対応しようとしたときに発生する並行処理の例外をキャッチする必要がありますその行はデータベースに戻ります。

    1. 更新された値を保存します。
    2. 並行性の違反をテーブルにマージすると、データベース内で削除された行が削除されます。
    3. 保存された値でテーブルに新しい行を挿入します。
    4. テーブルを保存します。
    +0

    David、返信いただきありがとうございます。残念ながら、手順2はあなたが記述したとおりには機能しません。並行性違反をテーブルにマージすると、データベースから削除された行はDataTableから削除されません。 –

    +0

    また、これは同時実行例外に応答して実行する必要があることに言及します。しかし、一度に1つの違反に対して同時実行の例外が発生するのに対し、マージは一度にすべてのテーブルに対して実行する必要があります。したがって、例外が発生したときに違反を処理すると、2回目または3回目の違反が誤って処理される可能性があります。このため、私は、並行性の例外は応答を開始するために頼ることができないと結論づけました。私は先験的に違反を捜す必要があります。私は間違っていますか? –

    関連する問題