ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(ODBCドライバ編)

C.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. コネクションを接続します。詳細は、“C.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. オブジェクトを破棄します。

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

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

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

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

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

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

    '4. データ操作を行う処理を記述
    com.CommandText = "INSERT INTO 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 Microsoft.Data.Odbc.OdbcException
    '5. ロールバック
    trn.Rollback()

End Try