ページの先頭行へ戻る
Symfoware Server V11.1.0 アプリケーション開発ガイド(.NET Data Provider編)
FUJITSU Software

A.3.13 TransactionScopeクラスを利用した分散トランザクション制御

TransactionScopeクラスで、暗黙的な分散トランザクション制御ができます。

アプリケーションの手順

  1. TransactionScopeオブジェクトを作成します。

  2. コネクション1のデータ操作。

    1. コネクション1を確立します。

    2. コネクション1でデータの追加操作を行います。

    3. コネクション1をクローズします。

  3. コネクション2のデータ操作。

    1. コネクション2を確立します。

    2. コネクション2でデータの追加操作を行います。

    3. コネクション2をクローズします。

  4. TransactionScopeオブジェクトのComplete()メソッドを呼び出して、トランザクションがコミットできる状態であることをトランザクションマネージャに伝えます。

  5. TransactionScopeオブジェクトを破棄します。

  6. アプリケーションの同期化。

    ' 1.TransactionScopeのコンストラクタでTransactionScopeオブジェクトを作成して、分散トランザクションを開始する。
    Using tran As New TransactionScope()
        'トランザクションに参加する接続文字列にenlistキーワードを指定する。
        Dim connString1 As String = "DATA SOURCE=127.0.0.1;PORT=26551;" & "INITIAL CATALOG=TEST;USER ID=USER01;PASSWORD=PASS01;ENLIST=TRUE"
        Dim connString2 As String = "DATA SOURCE=127.0.0.1;PORT=26551;" & "INITIAL CATALOG=TEST2;USER ID=USER02;PASSWORD=PASS02;ENLIST=TRUE"
     
    '2. 接続1のデータ操作
        Dim conn1 As New SymfowareConnection(connString1)
        '2-1. コネクションの確立
        conn1.Open()
        '2-2. データの追加操作を行う
        Dim com1 As New SymfowareCommand("INSERT INTO SAMPLE1.TESTTBL VALUES(133," &"500.001,DATE'2007-04-10','TEST DATA')", conn1)
        com1.ExecuteNonQuery()
        '2-3. コネクションのクローズ
        conn1.Close()
    
    '3. 接続2のデータ操作
        Dim conn2 As New SymfowareConnection(connString2)
        '3-1. コネクションの確立
        conn2.Open()
        '3-2. データの追加操作を行う
        Dim com2 As New SymfowareCommand("INSERT INTO SAMPLE2.TESTTBL2 VALUES(133, 'TARO')", conn2)
        com2.ExecuteNonQuery()
        '3-3. コネクションのクローズ
        conn2.Close()
        
    '4.トランザクションがコミットできる状態であることをトランザクションマネージャに伝える
        tran.Complete()
    End Using
    '5. TransactionScopeオブジェクトの破棄
    
    '6. アプリケーションの同期化
        Call SLEEP(5000)