こちらのコードではADO.NETのオブジェクトを使用して直接コミットやロールバックの操作を行います。
トランザクションはローカルトランザクション(単一のデータソースに対するトランザクション)です。
そもそも.NET Frameworkでは複数のデータソースを跨いだ分散トランザクションにも対応しています。
分散トランザクションを使うようなことはまだ未経験なので詳しく書けないが予備知識として
.NET Frameworkのバージョン
・1.0ではEnterpriseServiceのコンポーネントを作成して利用するくらい知っておけば後々役に立つかも...
・1.1では上記のコンポーネント無しで分散トランザクションが制御ができるようになった
・2.0では専用のTransactionScopeオブジェクトが導入されてローカルトランザクション→分散トランザクションの昇格が自動的に行われるようになった
実際のコードでは
Dim cn As New SqlClient.SqlConnection
Dim cmd As New SqlClient.SqlCommand
Dim trans As New SqlClient.SqlTransaction 'トランザクション処理を司るオブジェクト
cn.ConnectionString = myConStr 'Sql接続文字列
cn.Open() 'DBへの接続
trans=cn.BeginTransaction() 'トランザクション処理を開始する
cmd.Connection = cn
cmd.Transaction = trans 'コマンドをトランザクション処理に組み入れる
cmd.CommandText = "UPDATE titles SET price = price + 1 WHERE title_id = 'A0001'"
Try
cmd.ExecuteNonQuery()
trans.Commit() 'トランザクション処理をCommit(確定)する
Catch ex As Exception
trans.Rollback() '例外が発生したらトランザクション処理をRollback(破棄)する
End Try
cn.Close() 'DBとの接続解除
のように書くとトランザクション処理を行えます。
また今回は例外の発生の有無でトランザクション処理のCommitとRollbackの切り替えをしましたが、
If [トランザクション処理成功] Then
Commit()
Else
Rollback()
End If
とすることも多いでしょう。
他のADO.NETの基本的なコードの項と同じように
Dim cn As New OleDb.OleDbConnection
Dim cmd As New OleDb.OleDbCommand
Dim trans As New OleDb.OleDbTransaction
とするとAccessのデータベース(mdbファイル)に対してもトランザクション処理が行えるようになります。