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文を実行します。
アプリケーションの手順
コネクションを接続します。詳細は、“C.5.1 接続および切断”を参照してください。
OdbcCommand.ExecuteNonQueryメソッドでSET TRANSACTION文を実行しアクセスモードを設定します。
OdbcConnection.BeginTransactionメソッドでトランザクションを開始します。
引数IsolationLevelに独立性水準(IsolationLevel.ReadCommitted)を設定します。
OdbcTransactionオブジェクトが作成されます。
作成されたOdbcTransactionオブジェクトを、データ操作を行うオブジェクト(OdbcCommand)のTransactionプロパティに設定し実行します。
データ操作が正常終了した場合、OdbcTransaction.Commitメソッドを実行します。
データ操作が異常終了した場合、OdbcTransaction.Rollbackメソッドを実行します。
コネクションを切断します。
オブジェクトを破棄します。
エラー処理については、“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