|
分類:[データベース全般]
環境;Visual Studio 2008 (評価版) 言語;C# DB;SQL Server 2005
お世話になります。この度、C#で作成した画面から複数件のレコードを、 SQL ServerにあるDB01のtable1に更新する処理を実装中ですが、 楽観ロックで更新をしなければなりません。
今まで悲観的ロック・楽観的ロックなどを恥ずかしながら意識したことがなかったので、 早速調べてみたのですが、トランザクションの開始終了やcommit、rollbackの位置が わからなく投稿させて頂きました。
仕様としましては、たとえば10件レコードがあります。 ループ処理の中で8件目までは正常でも、9件目でエラーが発生した場合は、 正常に終了した8件も無効とし、ロールバックを行います。
調べた結果、私なりに考えたものを下記に記載させて頂きます。
間違いをご指摘お願い致します。
[悲観ロック] トランザクション開始 try { for (10件) { アップデート処理 } コミット } catch (Exception) { ロールバック } トランザクション終了
トランザクション内ではロックするレコードの指定をしていないので トランザクションが開始されたらテーブルロック扱いとなる??
[楽観ロック] トランザクション開始 try { for (10件) { select 〜 for update 〜 ※この指定をすることでテーブルロックからレコードロックにかわる?? if (1件) { アップデート処理 } else { ロールバック } } コミット } catch (Exception) { ロールバック } トランザクション終了
|