0

下記サンプルコードをご確認ください。以下のコードは成功しますか?

    using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 30, 0)))
        {  

con.Open();
//do A type process
con.Close();

con.Open();
//do B type process
con.Close();


    scope.Complete();
        }

PS: (1 つのコンを使用することを提案しないでください。理由は、このリンクで 3 層アーキテクチャを使用しているためです ( http://geekswithblogs.net/edison/archive/2009/04/05/a-simple-3 -tier-layers-application-in-asp.net.aspx )、および AB タイプのプロセスは、接続を自動的に開閉する関数 (genericdata クラス) で呼び出されます。) したがって、上記のコードは私の実際のコードの解釈です。

4

1 に答える 1

1

DTC を使用すると、DB レイヤーとデータベースの間のレイヤーのように機能します。つまり、db に加えられた変更は、.Complete() を呼び出すまで適用されません。使用する接続と、トランザクションに関与するデータベースの数は実際には関係ありません。

必ず .Complete() を呼び出してトランザクションを終了してください。または、ネストされたトランザクションスコープを持つこともできます

Scope1 Scope2 Scope3

上記では、子スコープが Complete を呼び出しても、Scope1.Complete が呼び出されるたびにデータがデータベースに移動されます。

于 2013-08-01T08:13:31.420 に答える