ADO.NETの基本的なコード:トランザクション処理

業務アプリケーションに求められるデータベースの処理うち、トランザクションの処理についての基本的なコードの例をあげておきます。

こちらのコードでは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ファイル)に対してもトランザクション処理が行えるようになります。