Ejemplo simple en vb.net y Ado.Net para crear transacciones
En el siguiente código se utiliza el método beginTransaction del objeto sqlConnection, para indicar que iniciamos una nueva transacción, y con los métodos Commit y RollBack del objeto sqlTransaction, poder confirmar o cancelar la transacción iniciada ,y de esta forma tener la seguridad de que al ejecutar mas de una sentencia sql u operación en la base de datos, si alguna falla , poder cancelar todo
Lo siguiente, si al ejecutar el segundo comando, se produce una excepción, se ejecuta el método RollBack para cancelar y deshacer la operación, si no se produce error, se ejecuta Commit para confirmar las dos operaciones realizadas
Código fuente
Option Explicit On
Option Strict On
Imports System.Data.SqlClient
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim cs As String = "server=(local)\SQLEXPRESS;" & _
"integrated security=sspi;" &"database=catalogo"
'Instanciar nuevo SqlTransaction
Dim objTransac As SqlTransaction = Nothing
Dim cn As New SqlConnection(cs)
Try
' abrir una nueva conexión a la bd
cn.Open()
' Establecer e iniciar la nueva transacción con BeginTransaction
objTransac = cn.BeginTransaction
' comando 1
' '''''''''''''''''''''''''''''''''''''''''''''
' Inicializar nuevo SqlCommand
Dim cmdInert As New SqlCommand("Insert Into .... )", cn)
With cmdInert
' Establecer la transacción para el Insert
.Transaction = objTransac
.ExecuteNonQuery() ' ejecutar
End With
' comando 2
' '''''''''''''''''''''''''''''''''''''''''''''
Dim cmdUpdate As New SqlCommand("Update .... ", cn)
With cmdUpdate
' establecer la transacción para el comando Update
.Transaction = objTransac
.ExecuteNonQuery() ' ejecutar
End With
' Confirmar la transacción a la base de datos con el método Commit
objTransac.Commit()
' errores
Catch ex As Exception
' cancelar la trnsacción en caso de error en el
'segundo comando con el método Rollback
If Not objTransac Is Nothing Then
objTransac.Rollback() 'deshacer
End If
MsgBox(ex.Message.ToString)
Finally
' cerrar la conexión
If Not cn Is Nothing Then
If cn.State = ConnectionState.Open Then
cn.Close()
End If
End If
End Try
End Sub
End Class
Option Strict On
Imports System.Data.SqlClient
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim cs As String = "server=(local)\SQLEXPRESS;" & _
"integrated security=sspi;" &"database=catalogo"
'Instanciar nuevo SqlTransaction
Dim objTransac As SqlTransaction = Nothing
Dim cn As New SqlConnection(cs)
Try
' abrir una nueva conexión a la bd
cn.Open()
' Establecer e iniciar la nueva transacción con BeginTransaction
objTransac = cn.BeginTransaction
' comando 1
' '''''''''''''''''''''''''''''''''''''''''''''
' Inicializar nuevo SqlCommand
Dim cmdInert As New SqlCommand("Insert Into .... )", cn)
With cmdInert
' Establecer la transacción para el Insert
.Transaction = objTransac
.ExecuteNonQuery() ' ejecutar
End With
' comando 2
' '''''''''''''''''''''''''''''''''''''''''''''
Dim cmdUpdate As New SqlCommand("Update .... ", cn)
With cmdUpdate
' establecer la transacción para el comando Update
.Transaction = objTransac
.ExecuteNonQuery() ' ejecutar
End With
' Confirmar la transacción a la base de datos con el método Commit
objTransac.Commit()
' errores
Catch ex As Exception
' cancelar la trnsacción en caso de error en el
'segundo comando con el método Rollback
If Not objTransac Is Nothing Then
objTransac.Rollback() 'deshacer
End If
MsgBox(ex.Message.ToString)
Finally
' cerrar la conexión
If Not cn Is Nothing Then
If cn.State = ConnectionState.Open Then
cn.Close()
End If
End If
End Try
End Sub
End Class
No hay comentarios:
Publicar un comentario