トランザクション処理

 トランザクション処理を行うにはConnectionオブジェクトとCommandオブジェクトを使います。DataAdapterやDataSetではトランザクション処理を行いません。

 トランザクション処理は次の手順で行ないます。

  1. Connectionオブジェクトを生成する
  2. データベースに接続する
  3. ConnectionオブジェクトのBeginTransactionメソッドでTransactionオブジェクトを取得する
  4. Commandオブジェクトを生成する
  5. CommandオブジェクトのTransactionプロパティに取得したTransactionオブジェクトを設定する
  6. SQLコマンドを実行する
  7. 確定(Commit)するか、取り消し(Rollback)をする
  8. データベースを切断する

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 Windows フォーム アプリケーション
プロジェクト名 TransactionTest

サンプルダウンロード

○ フォームデザイン

 次の図のようにコントロールを配置してください。DataAdapter、DataSetも配置し、DataGridViewにM_ユーザーが表示されるようにしてください。

コントロールの配置例
コントロールの配置例

○ プログラム

 次のように各イベントプロシージャを記述してください。

Form1.vb

  1. 'Transactionオブジェクト
  2. Dim trans As SqlClient.SqlTransaction
  3. 'ボタンの有効・無効をセットするメソッド
  4. Private Sub AlterButton(ByVal flg As Boolean)
  5.  Me.Button1.Enabled = flg
  6.  Me.Button2.Enabled = flg
  7.  Me.Button3.Enabled = Not flg
  8.  Me.Button4.Enabled = Not flg
  9.  Me.Button5.Enabled = Not flg
  10. End Sub
  11. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  12.  'データセットを一度クリアにする
  13.  Me.DataSet11.Clear()
  14.  'データセットを同期させる
  15.  Me.SqlDataAdapter1.Fill(Me.DataSet11)
  16. End Sub
  17. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  18.  'データベースを開く
  19.  Me.SqlConnection1.Open()
  20.  'トランザクションの開始
  21.  Me.trans = Me.SqlConnection1.BeginTransaction
  22.  'ボタンの表示設定
  23.  Me.AlterButton(False)
  24. End Sub
  25. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  26.  'トランザクションの確定
  27.  Me.trans.Commit()
  28.  'データベースを閉じる
  29.  Me.SqlConnection1.Close()
  30.  'ボタンの表示設定
  31.  Me.AlterButton(True)
  32. End Sub
  33. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  34.  'トランザクションの取消
  35.  Me.trans.Rollback()
  36.  'データベースを閉じる
  37.  Me.SqlConnection1.Close()
  38.  'ボタンの表示設定
  39.  Me.AlterButton(True)
  40. End Sub
  41. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
  42.  'データを追加するSQL文生成
  43.  Dim sql As String = "INSERT INTO M_ユーザー VALUES(@id, @user, @pass, @name)"
  44.  System.Diagnostics.Debug.WriteLine("SQLステートメント:" & sql)
  45.  'コマンドオブジェクトの生成
  46.  Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, Me.SqlConnection1)
  47.  'トランザクションのセット
  48.  cmd.Transaction = Me.trans
  49.  'パラメータのセット
  50.  cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = Me.TextBox1.Text
  51.  cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = Me.TextBox2.Text
  52.  cmd.Parameters.Add("@pass", SqlDbType.VarChar).Value = Me.TextBox3.Text
  53.  cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = Me.TextBox4.Text
  54.  cmd.ExecuteNonQuery()
  55. End Sub

○ 実行結果

実行結果
実行結果

 「開始」でデータベースに接続します。そして、追加する項目を入力して、「追加」を押します。ここでは、追加する項目をパラメータを使用して設定しています。そして、確定するか、取消すか選択します。確定であれば、Commitメソッドを実行しますし、取消であればRollBackメソッドを実行します。

前へ   次へ