3

こんにちは、すべてトランザクション スコープの使用を開始しました。以下はコード スニペットです。私たちが理解する必要があるのは、接続に使用するたびに特定の接続が破棄/閉じられるという理解に基づいていますか? それで、それが閉じられたので、transaction.complete はどのように機能するのでしょうか?

using (TransactionScope transScope = new TransactionScope())
{
   try
   {
      string myConnStringLocal = "User Id=***;Password=****;Host=" + globalSettings.settingLocalIP + ";Database=" + globalSettings.settingLocalDB;
      using (MySqlConnection connectionLocal = new MySqlConnection(myConnStringLocal))
      {
         try{
         connectionLocal.Open();
         }
         Catch(Exception e)
         {

         }
         finally{
         connectionLocal.Close();
         }
      }

      string myConnStringCentral = "User Id=***;Password=*****;Host=" + globalSettings.settingCentralIP + ";Database=" + globalSettings.settingCentralDB;
      using (MySqlConnection connectionCentral = new MySqlConnection(myConnStringCentral))
      {
         try{
         connectionCentral.Open();
         }
         Catch(Exception e)
         {

         }
         finally{
         connectionCentral.Close();
         }

      }
      string myConnStringCentralCopy = "User Id=*****;Password=*****;Host=" + globalSettings.settingCentralCopyIP + ";Database=" + globalSettings.settingCentralCopyDB;
      using (MySqlConnection connectionCentralCopy = new MySqlConnection(myConnStringCentralCopy))
      {
         try{
         connectionCentralCopy.Open();
         }
         Catch(Exception e)
         {

         }
         finally{
         connectionCentralCopy.Close();
         }
      }
      transScope.Complete();
      Console.WriteLine("Transaction is completed");
   }
   catch (Exception)
   {
      Console.WriteLine("Transaction is rolled back");
   }
}
4

3 に答える 3

7

TransactionScope.Completeすべてのトランザクション マネージャに、このトランザクションをコミットしてもよいことを伝えます。すべてが実際にコミットされることを保証するものではありません。Completeメソッドが呼び出された後、すべてのトランザクション マネージャーが個別にコミットを開始し、すべてのトランザクション マネージャーが成功すると、トランザクションは正常に完了したと見なされます。詳細については、このリンクを参照してください。

于 2013-07-29T03:44:41.987 に答える
2

メソッドが呼び出されると、noがスローされた場合Complete、スコープ内のすべてがコミットされます。Exceptionなしでコードが範囲外にCompleteなると、コミットは発生しません。つまり、Completeメソッドを呼び出すと、スローされない場合Exceptions、指定されたスコープ内のトランザクションTransactionScopeがコミットされます。

また、階層、ツリーも存在する可能性があることを追加する必要がありますTransactionScopes。のサブスコープがロールバックTransactionScopeされた場合の の動作を設定することもできます。TransactionScope

于 2013-07-29T05:39:41.697 に答える