Transações podem ser vistas como um grupo de operações combinadas em uma unidade lógica de trabalho ; são usadas para controlar e manter a consistência e a integridade de cada ação em uma transação a despeito dos erros que poderão ocorrer no sistema.
Vejamos um exemplo para ilustrar melhor o conceito:
Os passos básicos necessários para realizar uma transação usando os objetos Connection e Transaction com ADO.NET são:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'define a string de conexão com o banco de dados
Dim strConn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste\Nwind2002.mdb"
'define o objeto OledbConnection usando a string de conexão
Dim conexao As New OleDbConnection(strConn)
'abre a conexao
Try
conexao.Open()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
'inicia uma transação local
Dim Transacao As OleDbTransaction = conexao.BeginTransaction()
'Alista o command na transação atual.
Dim comando As OleDbCommand = conexao.CreateCommand()
comando.Transaction = Transacao
Try
'define os comandos SQL para icluir dados na tabela Transportadoras do banco de dados Northwind.mdb
comando.CommandText = "Insert into Transportadoras (CódigoDaTransportadora,NomeDaEmpresa,Telefone) VALUES (4, 'JcmSoft','(055)-658-55')"
comando.ExecuteNonQuery()
comando.CommandText = "Insert into Transportadoras (CódigoDaTransportadora,NomeDaEmpresa,Telefone) VALUES (5, 'Macorati','(061)-123-54')"
comando.ExecuteNonQuery()
'efetua o commit - consolida as inclusções
Transacao.Commit()
MsgBox("Foram incluídos dois registros na fonte de dados.", MsgBoxStyle.Exclamation, "Commit")
Catch ex As Exception
Try
'cancela a transacao - rollback
Transacao.Rollback()
Catch ex1 As OleDbException
If Not Transacao.Connection Is Nothing Then
MsgBox("Uma exceção do tipo " & ex1.GetType().ToString() & " foi encontrada durante a tentativa de cancelar a transação.", MsgBoxStyle.Critical, "RollBack")
End If
End Try
MsgBox("Uma exceção do tipo " & ex.GetType().ToString() & " foi encontrada durante durante a inclusão de dados.", MsgBoxStyle.Critical, "Transações")
MsgBox("Nenhum registro foi incluido na fonte de dados.", MsgBoxStyle.Critical, "RollBack")
Finally
'fecha a conexao com a fonte de dados
conexao.Close()
End Try
End Sub
....
Try.
'define os comandos SQL para icluir dados na tabela Transportadoras do banco de dados Northwind.mdb
comando.CommandText = "Insert into Transportadoras (CódigoDaTransportadora,NomeDaEmpresa,Telefone) VALUES (6, 'JcmSoft','(055)-658-55')"
comando.ExecuteNonQuery()
comando.CommandText = "Insert into Transportadoras (CódigoDaTransportadora,NomeDaEmpresa,Telefone) VALUES (7, 'Macorati','(061)-123-54')"
comando.ExecuteNonQuery()
Throw New System.Exception()
'efetua o commit - consolida as inclusções
Transacao.Commit()
MsgBox("Foram incluídos dois registros na fonte de dados.", MsgBoxStyle.Exclamation, "Commit")
Catch ex As Exception
Try
'cancela a transacao - rollback
Transacao.Rollback()
Catch ex1 As OleDbException
If Not Transacao.Connection Is Nothing Then
MsgBox("Uma exceção do tipo <<" & ex1.GetType().ToString() & ">> foi encontrada durante a tentativa de cancelar a transação.", MsgBoxStyle.Critical, "RollBack")
End If
End Try
MsgBox("Uma exceção do tipo <<" & ex.GetType().ToString() & ">> foi encontrada durante durante a inclusão de dados.", MsgBoxStyle.Critical, "Transações")
MsgBox("Nenhum registro foi incluido na fonte de dados.", MsgBoxStyle.Critical, "RollBack")
Finally
'fecha a conexao com a fonte de dados
conexao.Close()
End Try
...
Fonte: Macoratti
Comente e interaja!