ページの先頭行へ戻る
Symfoware Server V12.4.0 アプリケーション開発ガイド(ODBCドライバ編)
FUJITSU Software

B.5.9 トランザクション制御

ADO.NET連携でトランザクション制御を行うサンプルコードについて説明します。

トランザクション制御は、明示的に行うことができます。

OdbcConnection.BeginTransactionメソッド、OdbcTransaction.CommitメソッドまたはOdbcTransaction.Rollbackメソッドで明示的に行うことができます。これらのメソッドでトランザクションを制御していない場合は、トランザクションはSQL文を実行することで開始され、そのSQL文の処理完了後すぐにコミットされて終了します。

アクセスモードの設定または変更は、SET TRANSACTION文で行います。

独立性水準の設定または変更は、OdbcConnection.BeginTransactionメソッドの引数IsolationLevelで指定するまたはSET TRANSACTION文で行います。SET TRANSACTION文で設定または変更を行う場合は、OdbcConnection.BeginTransactionメソッド実行時に引数IsolationLevelの設定値に変更されるため、OdbcConnection.BeginTransactionメソッド実行後に行う必要があります。このため、引数IsolationLevelによる設定または変更を推奨します。

本サンプルコードは、アクセスモードをREAD WRITE、独立性水準をREAD COMMITTEDに設定後、INSERT文を実行します。

アプリケーションの手順

  1. コネクションを接続します。詳細は、“B.5.1 接続および切断”を参照してください。

  2. OdbcCommand.ExecuteNonQueryメソッドでSET TRANSACTION文を実行しアクセスモードを設定します。

  3. OdbcConnection.BeginTransactionメソッドでトランザクションを開始します。
    引数IsolationLevelに独立性水準(IsolationLevel.ReadCommitted)を設定します。
    OdbcTransactionオブジェクトが作成されます。

  4. 作成されたOdbcTransactionオブジェクトを、データ操作を行うオブジェクト(OdbcCommand)のTransactionプロパティに設定し実行します。

  5. データ操作が正常終了した場合、OdbcTransaction.Commitメソッドを実行します。
    データ操作が異常終了した場合、OdbcTransaction.Rollbackメソッドを実行します。

  6. コネクションを切断します。

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

エラー処理については、“B.5.10 エラー処理”を参照してください。

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        'オブジェクト宣言
        Dim con As System.Data.Odbc.OdbcConnection
        Dim com As System.Data.Odbc.OdbcCommand
        Dim trn As System.Data.Odbc.OdbcTransaction
        Dim msgstr As String

        'OdbcConnectionオブジェクトの生成
        con = New System.Data.Odbc.OdbcConnection("DSN=DSN01;UID=USER01;PWD=PASS01;")

        Try
            '1. コネクション接続
            con.Open()

            '2. アクセスモードの設定
            com = New System.Data.Odbc.OdbcCommand("SET TRANSACTION READ WRITE", con)
            com.ExecuteNonQuery()

            '3. トランザクション開始(独立性水準の設定)
            'OdbcTransactionオブジェクトの生成
            trn = con.BeginTransaction(IsolationLevel.ReadCommitted)

            '4. データ操作を行う処理を記述
            com.CommandText = "INSERT INTO SAMPLE1.TESTTBL(KEY_C) VALUES(1)"

            'OdbcCommand.Transactionプロパティに生成したOdbcTransactionオブジェクトを設定
            com.Transaction = trn
            com.ExecuteNonQuery()

            '5. コミット
            trn.Commit()

            '6. コネクション切断
            con.Close()

            '7. オブジェクトの破棄
            com.Dispose()
            con.Dispose()

            'エラー処理
        Catch ex As System.Data.Odbc.OdbcException
            '5. ロールバック
            trn.Rollback()

            msgstr = "▲▼  COMMUNICATION OFF LINE  ▲▼"
            MessageBox.Show(msgstr, "!ERROR!", MessageBoxButtons.OK,
                                              MessageBoxIcon.None)


        End Try

    End Sub
End Class