« [Access VBA] フォームを開く・閉じる | メイン | [ASP.NET] DataGrid に編集ボタンをつける »

2005年11月01日

[VB.NET|SQLServer] レコードの削除・挿入・更新(トランザクション有)

    '*** 宣言
    Imports System.Data.SqlClient
    Private Conn As SqlConnection
    Private DA As SqlDataAdapter
    Private DS As DataSet

Dim strConn As String = _
"Server=localhost;User ID=***;Password=***;database=Test;"
Dim SqlTran As SqlTransaction
Dim strSQL As String
Dim cmdSQL As SqlCommand

Dim dRow As DataRow
Dim dCol As DataColumn

Dim i As Integer
Dim j As Integer

'*** Form_Load
Me.Conn = New SqlConnection(strConn)
Me.DA = New SqlDataAdapter
Me.DS = New DataSet
Me.Conn.Open()

'*** Form_Closed
Me.DS.Dispose()
Me.DA.Dispose()
Me.Conn.Close()
Me.Conn.Dispose()

'排他処理する場合?
Me.SqlTran = Me.Conn.BeginTransaction(IsolationLevel.Serializable)
strSQL = "SELECT * FROM TestTable WITH(ROWLOCK, UPDLOCK) ORDER BY TestCol1 ASC"
'--- SELECT
        Try
            Me.SqlTran = Me.Conn.BeginTransaction()

strSQL = "SELECT * FROM TestTable ORDER BY TestCol1 ASC"
Me.cmdSQL = New SqlCommand(strSQL, Me.Conn, Me.SqlTran)
Me.DA.SelectCommand = Me.cmdSQL

Me.DS.Clear()
Me.DA.Fill(Me.DS, "TestTable")

Call ListView_Disp(Me.DS)
Me.SqlTran.Commit()

Catch ex As Exception
Debug.WriteLine(ex.ToString)
MessageBox.Show(ex.ToString)
Me.SqlTran.Rollback()
Finally
Me.cmdSQL.Dispose()
Me.SqlTran.Dispose()
End Try

 '--- INSERT
        dRow = Me.DS.Tables("TestTable").NewRow
        dRow(0) = CInt(Me.TextBox1.Text)
        dRow(1) = CStr(Me.TextBox2.Text)
        dRow(2) = CStr(Me.TextBox3.Text)
        Me.DS.Tables("TestTable").Rows.Add(dRow)

Try
Me.SqlTran = Me.Conn.BeginTransaction()

strSQL = "INSERT INTO TestTable VALUES (@Col1, @Col2, @Col3)"
Me.cmdSQL = New SqlCommand(strSQL, Me.Conn, Me.SqlTran)
Me.cmdSQL.Parameters.Add("@Col1", SqlDbType.Int, 4, "TestCol1")
Me.cmdSQL.Parameters.Add("@Col2", SqlDbType.VarChar, 50, "TestCol2")
Me.cmdSQL.Parameters.Add("@Col3", SqlDbType.VarChar, 50, "TestCol3")
Me.DA.InsertCommand = Me.cmdSQL

Me.DA.InsertCommand.Parameters("@Col1").Value = CInt(Me.TextBox1.Text)
Me.DA.InsertCommand.Parameters("@Col2").Value = CStr(Me.TextBox2.Text)
Me.DA.InsertCommand.Parameters("@Col2").Value = CStr(Me.TextBox3.Text)
Me.DA.Update(Me.DS, "TestTable")

Call ListView_Disp(Me.DS)
Me.SqlTran.Commit()

Catch ex As Exception
Debug.WriteLine(ex.ToString)
MessageBox.Show(ex.ToString)
Me.SqlTran.Rollback()
Finally
Me.cmdSQL.Dispose()
Me.SqlTran.Dispose()
End Try

 '--- DELETE
        For Each dRow In DS.Tables("TestTable").Rows
            If CInt(dRow(0)) = CInt(TextBox1.Text) Then
                dRow.Delete()
                Exit For
            End If
        Next

Try
Me.SqlTran = Me.Conn.BeginTransaction

strSQL = "DELETE FROM TestTable WHERE TestCol1 = @Col1"
Me.cmdSQL = New SqlCommand(strSQL, Me.Conn, Me.SqlTran)
Me.cmdSQL.Parameters.Add("@Col1", SqlDbType.Int, 4, "TestCol1")
Me.DA.DeleteCommand = Me.cmdSQL

Me.DA.DeleteCommand.Parameters("@Col1").Value = CInt(Me.TextBox1.Text)
Me.DA.Update(Me.DS, "TestTable")

Call ListView_Disp(Me.DS)
Me.SqlTran.Commit()

Catch ex As Exception
Debug.WriteLine(ex.ToString)
MessageBox.Show(ex.ToString)
Me.SqlTran.Rollback()
Finally
Me.cmdSQL.Dispose()
Me.SqlTran.Dispose()
End Try

'--- UPDATE
        For Each dRow In DS.Tables("TestTable").Rows
            If CInt(dRow(0)) = CInt(TextBox1.Text) Then
                dRow(1) = TextBox2.Text
                dRow(2) = TextBox3.Text
                Exit For
            End If
        Next

Try
Me.SqlTran = Me.Conn.BeginTransaction

strSQL = "UPDATE TestTable SET TestCol2 = @Col2, TestCol3 = @Col3 WHERE TestCol1 = @Col1"
Me.cmdSQL = New SqlCommand(strSQL, Me.Conn, Me.SqlTran)
Me.cmdSQL.Parameters.Add("@Col1", SqlDbType.Int, 4, "TestCol1")
Me.cmdSQL.Parameters.Add("@Col2", SqlDbType.VarChar, 50, "TestCol2")
Me.cmdSQL.Parameters.Add("@Col3", SqlDbType.VarChar, 50, "TestCol3")
DA.UpdateCommand = Me.cmdSQL

Me.DA.UpdateCommand.Parameters("@Col1").Value = CInt(Me.TextBox1.Text)
Me.DA.UpdateCommand.Parameters("@Col2").Value = CStr(Me.TextBox2.Text)
Me.DA.UpdateCommand.Parameters("@Col2").Value = CStr(Me.TextBox3.Text)
Me.DA.Update(Me.DS, "TestTable")

Call ListView_Disp(Me.DS)
Me.SqlTran.Commit()

Catch ex As Exception
Debug.WriteLine(ex.ToString)
MessageBox.Show(ex.ToString)
Me.SqlTran.Rollback()
Finally
Me.cmdSQL.Dispose()
Me.SqlTran.Dispose()
End Try

2005 / 11 / 01