VB.Net/Database ADO.net/Transaction

Материал из VB Эксперт
Перейти к: навигация, поиск

DataSet transaction

<source lang="vbnet"> Imports System Imports System.Xml Imports System.Xml.Schema Imports System.IO Imports System.Data.SqlClient Imports System.Collections Imports System.Data

Public Class MainClass

   Shared Sub Main()
       Dim ConnectionString As String
       Dim myconnection As SqlConnection
       Dim mytransaction As SqlTransaction
       Dim mycommand1 As SqlCommand
       Dim myparam As SqlParameter
       Dim da As SqlDataAdapter
       Dim ds As New DataSet()
       Dim args() As String = Environment.GetCommandLineArgs
       ConnectionString = "Server=(local)\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=SSPI"
       myconnection = New SqlConnection(ConnectionString)
       myconnection.Open()
       da = New SqlDataAdapter("select * from Employee", myconnection)
       da.Fill(ds, "Employee")
       myconnection.Close()
       ds.Tables(0).Rows(0)("FirstName") = "11"
       mycommand1 = New SqlCommand("update Employee set FirstName=@FirstName " & "where ID=@ID ", myconnection)
       myparam = New SqlParameter("@ID", SqlDbType.SmallInt)
       myparam.SourceColumn = "ID"
       myparam.SourceVersion = DataRowVersion.Current
       mycommand1.Parameters.Add(myparam)
       myparam = New SqlParameter("@FirstName", SqlDbType.Int)
       myparam.SourceColumn = "FirstName"
       myparam.SourceVersion = DataRowVersion.Current
       mycommand1.Parameters.Add(myparam)
       myconnection.Open()
       mytransaction = myconnection.BeginTransaction()
       mycommand1.Transaction = mytransaction
       da.UpdateCommand = mycommand1
       Try
           da.Update(ds, "Employee")
           mytransaction.rumit()
           Console.WriteLine("Order modified successfully !")
       Catch e As Exception
           mytransaction.Rollback()
           Console.WriteLine(e.Message)
       Finally
           myconnection.Close()
       End Try
   End Sub

End Class


      </source>


Isolation Level ReadUncommitted

<source lang="vbnet"> Imports System Imports System.Xml Imports System.Xml.Schema Imports System.IO Imports System.Data.SqlClient Imports System.Collections Imports System.Data

Public Class MainClass

   Shared Sub Main()
       Dim myconnection1, myconnection2 As SqlConnection
       Dim mycommand1, mycommand2 As SqlCommand
       Dim mytransaction1, mytransaction2 As SqlTransaction
       Dim myreader As SqlDataReader
       Dim ConnectionString As String
       "open a database connection
       ConnectionString = "Server=(local)\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=SSPI"
       myconnection1 = New SqlConnection(ConnectionString)
       myconnection2 = New SqlConnection(ConnectionString)
       Try
           myconnection1.Open()
           myconnection2.Open()
           "start a transaction
           mytransaction1 = myconnection1.BeginTransaction()
           mytransaction2 = myconnection2.BeginTransaction(IsolationLevel.ReadUncommitted)
           mycommand1 = New SqlCommand()
           mycommand1.Connection = myconnection1
           mycommand1.Transaction = mytransaction1
           mycommand2 = New SqlCommand()
           mycommand2.Connection = myconnection2
           mycommand2.Transaction = mytransaction2
           mycommand1.rumandText = "insert into Employee  values (101, "F", "L")"
           mycommand1.ExecuteNonQuery()
           mycommand1.rumandText = "insert into Employee values (101, "F", "L")"
           mycommand1.ExecuteNonQuery()
           mycommand2.rumandText = "select * from Employee"
           myreader = mycommand2.ExecuteReader()
           Console.WriteLine("Last 2 Orders - Transaction is pending")
           Console.WriteLine("======================================")
           While myreader.Read()
               Console.WriteLine(myreader.GetInt32(0))
           End While
           myreader.Close()
           Console.ReadLine()
           mytransaction1.Rollback()
           mycommand2.rumandText = "select * from Employee"
           myreader = mycommand2.ExecuteReader()
           Console.WriteLine("Last 2 Orders - Transaction rolled back")
           Console.WriteLine("=======================================")
           While myreader.Read()
               Console.WriteLine(myreader.GetInt32(0))
           End While
           Console.ReadLine()
       Catch e As Exception
           Console.WriteLine(e.Message)
       Finally
           myconnection1.Close()
           myconnection2.Close()
       End Try
   End Sub

End Class


      </source>


Simple Transaction Commit and RollBack: SqlTransaction has completed; it is no longer usable.

<source lang="vbnet"> Imports System Imports System.Data Imports System.Data.SqlClient public class MainClass

  Shared Sub Main()
       Dim myconnection As SqlConnection
       Dim mycommand As SqlCommand
       Dim mytransaction As SqlTransaction
       Dim ConnectionString As String
       myconnection = New SqlConnection("server=(local)\SQLEXPRESS;" & _
         "integrated security=sspi;database=MyDatabase")
       myconnection.Open()
       "start a transaction
       mytransaction = myconnection.BeginTransaction()
       "configure command object to use transaction
       mycommand = New SqlCommand
       mycommand.Connection = myconnection
       mycommand.Transaction = mytransaction
       Try
           mycommand.rumandText = "insert into Employee(ID," & _
                     "FirstName,LastName) values(119, " & _
                     ""F","L")"
           mycommand.ExecuteNonQuery()
           mytransaction.Rollback()
           Console.WriteLine("Rollback()")
           mycommand.rumandText = "insert into Employee(ID," & _
                     "FirstName,LastName) values(119, " & _
                     ""F","L")"
           mytransaction.rumit()
       Catch e As Exception
           Console.WriteLine(e.Message)
       Finally
           myconnection.Close()
       End Try
  End Sub

End Class


      </source>


Transaction Commit Demo

<source lang="vbnet"> Imports System Imports System.Data Imports System.Data.SqlClient

public class MainClass

  Shared Sub Main()
     Dim thisConnection As New SqlConnection("server=(local)\SQLEXPRESS;" & _
         "integrated security=sspi;database=MyDatabase")
     " SQL Delete Commands
     Dim sql1 As String = "DELETE FROM Employee " & _
        "WHERE ID = 10" 
     Dim sql2 As String = "DELETE FROM Employee " & _
        "WHERE ID = 9"
     " Create command
     Dim thisCommand As New SqlCommand(sql1, thisConnection)
     " Create Transaction
     Dim thisTransaction As SqlTransaction
     Try
        " Open Connection
        thisConnection.Open()
        " Begin transaction and attach it to command
        thisTransaction = thisConnection.BeginTransaction()
        thisCommand.Transaction = thisTransaction
        " Run first delete command
        thisCommand.ExecuteNonQuery()
        " Setup and run second delete command
        thisCommand.rumandText = sql2
        thisCommand.ExecuteNonQuery()
        " Commit transaction
        thisTransaction.rumit()
        Console.WriteLine("Transaction Committed. Data Deleted")
     Catch ex As Exception
        " Roll back transaction
        thisTransaction.Rollback()
        Console.WriteLine("Transaction rolled back : " & ex.Message)
     Finally
        thisConnection.Close()
     End Try
  End Sub

End Class

      </source>


Transaction Rollback Demo

<source lang="vbnet"> Imports System Imports System.Data Imports System.Data.SqlClient

public class MainClass

  Shared Sub Main()
     Dim thisConnection As New SqlConnection("server=(local)\SQLEXPRESS;" & _
         "integrated security=sspi;database=MyDatabase")
     " SQL Delete Commands
     Dim sql As String = "DELETE FROM Employee " & _
        "WHERE ID = 10" 
     " Create command
     Dim thisCommand As New SqlCommand(sql, thisConnection)
     " Create Transaction
     Dim thisTransaction As SqlTransaction
     Try
        " Open Connection
        thisConnection.Open()
        " Begin transaction and attach it to command
        thisTransaction = thisConnection.BeginTransaction()
        thisCommand.Transaction = thisTransaction
        " Run delete command
        thisCommand.ExecuteNonQuery()
        " Commit transaction
        thisTransaction.rumit()
        " Display success
        Console.WriteLine("Transaction Committed. Data Deleted")
     Catch ex As Exception
        " Roll back transaction
        thisTransaction.Rollback()
        Console.WriteLine("Transaction rolled back : " & ex.Message)
     Finally
        " Close Connection
        thisConnection.Close()
     End Try
  End Sub

End Class

      </source>


Transaction save point and roll back

<source lang="vbnet"> Imports System Imports System.Data Imports System.Data.SqlClient public class MainClass

  Shared Sub Main()
       Dim myconnection As SqlConnection
       Dim mycommand As SqlCommand
       Dim mytransaction As SqlTransaction
       Dim myreader As SqlDataReader
       "open a database connection
       myconnection = New SqlConnection("server=(local)\SQLEXPRESS;" & _
         "integrated security=sspi;database=MyDatabase")
       myconnection.Open()
       mytransaction = myconnection.BeginTransaction()
       mycommand = New SqlCommand()
       mycommand.Connection = myconnection
       mycommand.Transaction = mytransaction
       Try
           mycommand.rumandText = "insert into Employee values ("111","F","L")"
           mycommand.ExecuteNonQuery()
           mytransaction.Save("firstorder")
           mycommand.rumandText = "insert into Employee values ("112","F","L")"
           mycommand.ExecuteNonQuery()
           mycommand.rumandText = "insert into Employee values ("113","F","L")"
           mycommand.ExecuteNonQuery()
           mytransaction.Rollback("firstorder")
           mycommand.rumandText = "insert into Employee values ("114","F","L")"
           mycommand.ExecuteNonQuery()
           mycommand.rumandText = "insert into Employee values ("115","F","L")"
           mycommand.ExecuteNonQuery()
           mytransaction.rumit()
           mycommand.rumandText = "select * from Employee"
           myreader = mycommand.ExecuteReader()
           Console.WriteLine("3 Records")
           While myreader.Read()
               Console.WriteLine(myreader.GetInt32(0))
           End While
       Catch e As Exception
           Console.WriteLine(e.Message)
           Console.ReadLine()
       Finally
           myconnection.Close()
       End Try
  End Sub

End Class


      </source>