トランザクション処理
トランザクション処理を行うにはConnectionオブジェクトとCommandオブジェクトを使います。DataAdapterやDataSetではトランザクション処理を行いません。
トランザクション処理は次の手順で行ないます。
- Connectionオブジェクトを生成する
- データベースに接続する
- ConnectionオブジェクトのBeginTransactionメソッドでTransactionオブジェクトを取得する
- Commandオブジェクトを生成する
- CommandオブジェクトのTransactionプロパティに取得したTransactionオブジェクトを設定する
- SQLコマンドを実行する
- 確定(Commit)するか、取り消し(Rollback)をする
- データベースを切断する
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
Windows フォーム アプリケーション |
プロジェクト名 |
TransactionTest |
サンプルダウンロード
○ フォームデザイン
次の図のようにコントロールを配置してください。DataAdapter、DataSetも配置し、DataGridViewにM_ユーザーが表示されるようにしてください。
コントロールの配置例
○ プログラム
次のように各イベントプロシージャを記述してください。
Form1.vb
- 'Transactionオブジェクト
- Dim trans As SqlClient.SqlTransaction
- 'ボタンの有効・無効をセットするメソッド
- Private Sub AlterButton(ByVal flg As Boolean)
- Me.Button1.Enabled = flg
- Me.Button2.Enabled = flg
- Me.Button3.Enabled = Not flg
- Me.Button4.Enabled = Not flg
- Me.Button5.Enabled = Not flg
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- 'データセットを一度クリアにする
- Me.DataSet11.Clear()
- 'データセットを同期させる
- Me.SqlDataAdapter1.Fill(Me.DataSet11)
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- 'データベースを開く
- Me.SqlConnection1.Open()
- 'トランザクションの開始
- Me.trans = Me.SqlConnection1.BeginTransaction
- 'ボタンの表示設定
- Me.AlterButton(False)
- End Sub
- Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
- 'トランザクションの確定
- Me.trans.Commit()
- 'データベースを閉じる
- Me.SqlConnection1.Close()
- 'ボタンの表示設定
- Me.AlterButton(True)
- End Sub
- Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
- 'トランザクションの取消
- Me.trans.Rollback()
- 'データベースを閉じる
- Me.SqlConnection1.Close()
- 'ボタンの表示設定
- Me.AlterButton(True)
- End Sub
- Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
- 'データを追加するSQL文生成
- Dim sql As String = "INSERT INTO M_ユーザー VALUES(@id, @user, @pass, @name)"
- System.Diagnostics.Debug.WriteLine("SQLステートメント:" & sql)
- 'コマンドオブジェクトの生成
- Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(sql, Me.SqlConnection1)
- 'トランザクションのセット
- cmd.Transaction = Me.trans
- 'パラメータのセット
- cmd.Parameters.Add("@id", SqlDbType.VarChar).Value = Me.TextBox1.Text
- cmd.Parameters.Add("@user", SqlDbType.VarChar).Value = Me.TextBox2.Text
- cmd.Parameters.Add("@pass", SqlDbType.VarChar).Value = Me.TextBox3.Text
- cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = Me.TextBox4.Text
- cmd.ExecuteNonQuery()
- End Sub
○ 実行結果
実行結果
「開始」でデータベースに接続します。そして、追加する項目を入力して、「追加」を押します。ここでは、追加する項目をパラメータを使用して設定しています。そして、確定するか、取消すか選択します。確定であれば、Commitメソッドを実行しますし、取消であればRollBackメソッドを実行します。
前へ 次へ