トランザクション スコープを使うと分散トランザクションにされてしまう

データベースでトランザクションを実行するとき、C#ではTransactionScopeを使うと便利。


デバッグしているときも、最後のCompleteメソッドを呼ばなければ、何も変わらないから助かる。

「begin transaction」で始めると「end」を忘れてしまうのよね。その間、ずっとトランザクションしているのだろうか。

ただし、ひとつ気をつけないといけないのは、コネクションを何回も開くと、たとえローカルなデータベースにしかアクセスしていなくても、分散トランザクションと誤解されてしまうこと。
スコープの中でコネクションを1回だけ開けば問題なしです。

     using(TransactionScope scope = new TransactionScope())
     {
          sqlConnection cn = new sqlConnection(xxx);
          cn.Open();
          // いろいろ実行
          scope.Complete();
     }


コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。