« [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 DataSetDim strConn As String = _
"Server=localhost;User ID=***;Password=***;database=Test;"
Dim SqlTran As SqlTransaction
Dim strSQL As String
Dim cmdSQL As SqlCommandDim dRow As DataRow
Dim dCol As DataColumnDim 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.cmdSQLMe.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.cmdSQLMe.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 NextTry
Me.SqlTran = Me.Conn.BeginTransactionstrSQL = "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.cmdSQLMe.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 NextTry
Me.SqlTran = Me.Conn.BeginTransactionstrSQL = "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.cmdSQLMe.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