2012-03-28 14 views
1

最初に、ADO.Netに対してn個のトランザクションレベルを持つことが可能ですか?次に、正しい使い方ですか?ADO.NETのネストされたトランザクション

 var tx = cx.BeginTransaction(); 

     cx.Execute("insert into atable(id) values(123123)"); 

     var tx2=tx.BeginTransaction(); 

     cx.Execute("insert into atable(id) values(123127)"); 

     tx2.Commit(); 

     tx.Commit(); 

... など

+0

あなたはなぜこれをやりたいのですか? – daryal

+0

なぜあなたは最初の場所で別のトランザクションを使用していますか?一度に1つのアクションしか実行しておらず、それはすでにトランザクショナルであるため、挿入がコミットされるか、コミットされません。あなたが達成しようとしていることは何ですか?プロセス全体に対して1つのトランザクションだけが必要なようです。 – PedroC88

+0

@ PedroC88:これは単なる例です。簡単に説明するのは簡単です。 – sgtz

答えて

4

あなたはTransactionScopeを使って巣取引はできる - 最も外側のものがコミットされます一度しかし、彼らだけコミットされます。

いずれかがロールバックされると、すべてロールバックされます。

トランザクションの作成をusingステートメントにラップして、適切な処分を確実に行う必要があります。

using(var tx1 = new TransactionScope()) 
{ 
    cx.Execute("insert into atable(id) values(123123)"); 

    using(var tx2 = new TransactionScope()) 
    { 
     cx.Execute("insert into atable(id) values(123127)"); 
     tx2.Complete(); 
    } 

    tx1.Complete() 
} 
+0

はベンダーの問題のように見えます。ありがとう。 – sgtz

+0

TransactionScopeのコンストラクタ引数がありませんか? – sgtz

+0

@sgtz - パラメータのないコンストラクタは空です。あなたが望むならば、いくつかの異なるパラメータを指定することができます。 – Oded

関連する問題