2016-03-26 8 views
1

をブロック使用して内部でトランザクションを使用するには:私はそれが適切などのように私は次のような構造を使用するすべてのデータベース関連のコードをしている間{}現時点で

try 
{ 
    using(FBConnection con = new FBConnection('connectionstringhere')) 
    { 
    con.Open(); 
    using(FBCommand cmd = FBCommand("qryString",con)) 
    { 
     cmd.Parameters.Add("paramSql", FbDbType.Date).Value ="somevalue"; 
     cmd.CommandType = CommandType.Text; 
     using(FBDatareader rdr = cmd.ExecuteReader()) 
     { 
     while(rdr.Read()) 
     { 
      //some code here 
     } 
     } 
    } 
    } 
} 
catch(FBException ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

今私は上記structure.Howでトランザクションを組み込みたいをしますか方法を使用してブロックを使用します。適切なコードスニペットで説明してください。

答えて

1

あなただけしかしこれは標準的なアプローチが

FBTransaction transaction = null; 
FBConnection con = null; 
try 
{ 
    con = new FBConnection('connectionstringhere'); 
    con.Open(); 
    transaction = con.BeginTransaction(); 
    ... 
    transaction.Commit(); 
} 
catch(FBException ex) 
{ 
    MessageBox.Show(ex.Message); 
    if(transaction!=null) transaction.Rollback(); 
} 
finally 
{ 
    if(transaction != null) transaction.Dispose(); 
    if(con != null) con.Dispose(); 
} 

のように書くことができTransactionScope class

try 
{ 
    using(TransactionScope scope = new TransactionScope()) 
    using(FBConnection con = new FBConnection('connectionstringhere')) 
    { 
    con.Open(); 
    ... 
    scope.Complete(); 
    } 
} 
catch(FBException ex) 
{ 
    // No rollback needed in case of exceptions. 
    // Exiting from the using statement without Scope.Complete 
    // will cause the rollback 
    MessageBox.Show(ex.Message); 
} 

を使用してアプローチすることができた(のExecuteReader)のレコードを読んでいる場合は、トランザクションを必要としません例外や例外が発生した場合の動作やFBConnectionオブジェクトについてはわからないので、トランザクションと接続を正しい順序で処理する伝統的なfinallyブロックのほうがよいでしょう。

+0

実際に私はいくつかのインサートをWhileまたはIfブロック内の別のテーブルに入れています.Hence私はコミットまたはロールバックのためにトランザクションを使用する必要があります.Hence私はブロックを使用してトランザクションを使用する適切な例を求めています – msm

+0

Thanks @Steve forあなたの答え :) – msm

関連する問題