TransactionScope.Complete メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > TransactionScope.Complete メソッドの意味・解説 

TransactionScope.Complete メソッド

メモ : このメソッドは、.NET Framework version 2.0新しく追加されたものです。

スコープ内のすべての操作正常に完了したことを示します

名前空間: System.Transactions
アセンブリ: System.Transactions (system.transactions.dll 内)
構文構文

例外例外
例外種類条件

InvalidOperationException

このメソッドは、既に一度呼び出されています。

解説解説

スコープ内のすべての操作正常に完了していることが確認できたら、このメソッド一度だけ呼び出してすべてのリソースの状態に一貫性があること、およびトランザクションコミットできる状態にあることをトランザクション マネージャ通知する必要がありますusing ブロック最後ステートメントとしてこの呼び出し配置することを強くお勧めます。

このメソッド使用方法詳細については、「トランザクション スコープ使用した暗黙的なトランザクション実装」を参照してください

この呼び出し行わないと、トランザクション マネージャは、システム障害発生したかまたはトランザクションスコープ内で例外スローされたと解釈するため、トランザクション中止されます。ただし、このメソッド呼び出したからといって必ずしもトランザクションコミット保証されるわけではありません。これはトランザクション マネージャステータス通知する手段にすぎません。このメソッド呼び出した後は、Current プロパティを介してアンビエント トランザクションアクセスできなくなりますアクセスようとする例外スローさます。

TransactionScope オブジェクトによってトランザクション作成した場合リソース マネージャ間での実際コミット作業End Using ステートメント実行されます。このオブジェクトによってトランザクション作成されていない場合、CommittableTransaction オブジェクト所有者によって Commit呼び出されるたびにコミット発生しますその時点で、このメソッドTransactionScope オブジェクト呼び出されたかどうかに基づいてトランザクション マネージャリソース マネージャ呼び出しコミットするロールバックするかを通知します

使用例使用例

次の例では、TransactionScope クラス使用してトランザクション参加するコード ブロック定義する方法示します

'  This function takes arguments for 2 connection strings and commands
 to create a transaction 
'  involving two SQL Servers. It returns a value > 0 if the transaction
 is committed, 0 if the 
'  transaction is rolled back. To test this code, you can connect to
 two different databases 
'  on the same server by altering the connection string, or to another
 RDBMS such as Oracle 
'  by altering the code in the connection2 code block.
Public Function CreateTransactionScope( _
  ByVal connectString1 As String,
 ByVal connectString2 As String,
 _
  ByVal commandText1 As String,
 ByVal commandText2 As String)
 As Integer

    ' Initialize the return value to zero and create a StringWriter
 to display results.
    Dim returnValue As Integer
 = 0
    Dim writer As System.IO.StringWriter =
 New System.IO.StringWriter

    ' Create the TransactionScope to execute the commands, guaranteeing
    '  that both commands can commit or roll back as a single unit of
 work.
    Using scope As New TransactionScope()
        Using connection1 As New SqlConnection(connectString1)
            Try
                ' Opening the connection automatically enlists it in
 the 
                ' TransactionScope as a lightweight transaction.
                connection1.Open()

                ' Create the SqlCommand object and execute the first
 command.
                Dim command1 As SqlCommand
 = New SqlCommand(commandText1, connection1)
                returnValue = command1.ExecuteNonQuery()
                writer.WriteLine("Rows to be affected by command1:
 {0}", returnValue)

                ' If you get here, this means that command1 succeeded.
 By nesting
                ' the using block for connection2 inside that of connection1,
 you
                ' conserve server and network resources as connection2
 is opened
                ' only when there is a chance that the transaction can
 commit.   
                 Using connection2 As New SqlConnection(connectString2)
                    Try
                        ' The transaction is escalated to a full distributed
                        ' transaction when connection2 is opened.
                        connection2.Open()

                        ' Execute the second command in the second database.
                        returnValue = 0
                        Dim command2 As SqlCommand
 = New SqlCommand(commandText2, connection2)
                        returnValue = command2.ExecuteNonQuery()
                        writer.WriteLine("Rows to be affected
 by command2: {0}", returnValue)

                    Catch ex As Exception
                        ' Display information that command2 failed.
                        writer.WriteLine("returnValue for command2:
 {0}", returnValue)
                        writer.WriteLine("Exception Message2:
 {0}", ex.Message)
                    End Try
                End Using

            Catch ex As Exception
                ' Display information that command1 failed.
                writer.WriteLine("returnValue for command1: {0}",
 returnValue)
                writer.WriteLine("Exception Message1: {0}",
 ex.Message)
            End Try
        End Using

        ' The Complete method commits the transaction. If an exception
 has been thrown,
        ' Complete is called and the transaction is rolled back.
        scope.Complete()
    End Using

    ' The returnValue is greater than 0 if the transaction committed.
    If returnValue > 0 Then
        writer.WriteLine("Transaction was committed.")
    Else
       ' You could write additional business logic here, for example,
 you can notify the caller 
       ' by throwing a TransactionAbortedException, or logging the failure.
       writer.WriteLine("Transaction rolled back.")
     End If

    ' Display messages.
    Console.WriteLine(writer.ToString())

    Return returnValue
End Function
// This function takes arguments for 2 connection strings and commands
 to create a transaction 
// involving two SQL Servers. It returns a value > 0 if the transaction
 is committed, 0 if the 
// transaction is rolled back. To test this code, you can connect to
 two different databases 
// on the same server by altering the connection string, or to another
 RDBMS such as Oracle 
// by altering the code in the connection2 code block.
static public int CreateTransactionScope(
    string connectString1, string connectString2
,
    string commandText1, string commandText2)
{
    // Initialize the return value to zero and create a StringWriter
 to display results.
    int returnValue = 0;
    System.IO.StringWriter writer = new System.IO.StringWriter();

    // Create the TransactionScope to execute the commands, guaranteeing
    // that both commands can commit or roll back as a single unit of
 work.
    using (TransactionScope scope = new TransactionScope())
    {
        using (SqlConnection connection1 = new
 SqlConnection(connectString1))
        {
            try
            {
                // Opening the connection automatically enlists it in
 the 
                // TransactionScope as a lightweight transaction.
                connection1.Open();

                // Create the SqlCommand object and execute the first
 command.
                SqlCommand command1 = new SqlCommand(commandText1,
 connection1);
                returnValue = command1.ExecuteNonQuery();
                writer.WriteLine("Rows to be affected by command1: {0}",
 returnValue);

                // If you get here, this means that command1 succeeded.
 By nesting
                // the using block for connection2 inside that of connection1,
 you
                // conserve server and network resources as connection2
 is opened
                // only when there is a chance that the transaction
 can commit.   
                using (SqlConnection connection2 = new
 SqlConnection(connectString2))
                    try
                    {
                        // The transaction is escalated to a full distributed
                        // transaction when connection2 is opened.
                        connection2.Open();

                        // Execute the second command in the second
 database.
                        returnValue = 0;
                        SqlCommand command2 = new SqlCommand(commandText2,
 connection2);
                        returnValue = command2.ExecuteNonQuery();
                        writer.WriteLine("Rows to be affected by command2: {0}",
 returnValue);
                    }
                    catch (Exception ex)
                    {
                        // Display information that command2 failed.
                        writer.WriteLine("returnValue for
 command2: {0}", returnValue);
                        writer.WriteLine("Exception Message2: {0}", ex.Message);
                    }
            }
            catch (Exception ex)
            {
                // Display information that command1 failed.
                writer.WriteLine("returnValue for command1:
 {0}", returnValue);
                writer.WriteLine("Exception Message1: {0}", ex.Message);
            }
        }

        // The Complete method commits the transaction. If an exception
 has been thrown,
        // Complete is not  called and the transaction is rolled back.
        scope.Complete();
    }

    // The returnValue is greater than 0 if the transaction committed.
    if (returnValue > 0)
    {
        writer.WriteLine("Transaction was committed.");
    }
    else
    {
        // You could write additional business logic here, for example,
 you can notify the caller 
        // by throwing a TransactionAbortedException, or logging the
 failure.
        writer.WriteLine("Transaction rolled back.");
    }

    // Display messages.
    Console.WriteLine(writer.ToString());

    return returnValue;
}
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照


このページでは「.NET Framework クラス ライブラリ リファレンス」からTransactionScope.Complete メソッドを検索した結果を表示しています。
Weblioに収録されているすべての辞書からTransactionScope.Complete メソッドを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からTransactionScope.Complete メソッド を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

TransactionScope.Complete メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



TransactionScope.Complete メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS