Control de concurrencia pesimista en ADO.NET (VB.NET)
Como lo prometido es deuda, aquí esta el código en VB.NET del anterior artículo
Imports System
Imports System.Text
Imports System.Data
Imports System.Data.SqlClient
Namespace BloqueoPesimista
 Module Module1
  Sub Main()
   Dim ds As DataSet = New DataSet()
   Dim conexion As SqlConnection = New SqlConnection()
   Dim transaccion As SqlTransaction
   Dim comando As SqlCommand = New SqlCommand()
   Dim da As SqlDataAdapter = New SqlDataAdapter()
   Console.WriteLine("Pulse una tecla para iniciar...")
   Console.ReadKey()
   Try
    ' La cadena de conexión indica que atacamos a la base de datos Northwind del servidor local
    conexion = New SqlConnection("Data Source=.;Initial Catalog=Northwind;Integrated Security=True")
    comando.Connection = conexion
    comando.CommandType = CommandType.Text
    ' El SELECT tiene un parámetro para evitar SQL Injection
    comando.CommandText = "SELECT ProductID, ProductName FROM Products WITH (Rowlock,Xlock) " & _
           "WHERE ProductID  = @ID"
    comando.Parameters.AddWithValue("@ID", 1)
    da.SelectCommand = comando
    'Abrimos la conexión y ejecutamos en comando
    'Nota: también se puede hacer con la sentencia Using() que nos evita abrir y cerrar la conexión
    conexion.Open()
    ' La transacción no tiene constructor, se crea a partir de la conexión a través de un Class Factory 
    transaccion = conexion.BeginTransaction(IsolationLevel.ReadCommitted)
    ' Una vez creada la transacción la asignamos al comando
    comando.Transaction = transaccion
    ' Ejecutamos el comando mediante el SQLDataAdapter
    da.Fill(ds, "Products")
    ' Mostramos el registro bloqueado
    Console.WriteLine("Registro con ProductID = {0} está bloqueado.", ds.Tables("Products").Rows(0)("ProductID"))
    Console.WriteLine("Pulse una tecla para finalizar el bloqueo...")
    Console.ReadKey()
    ' Finalizamos la transacción, aquí ya se deshace el bloqueo
    transaccion.Rollback()
    ' Cerramos la conexión
    conexion.Close()
   Catch ex As Exception
    If conexion.State <> ConnectionState.Closed Then
     conexion.Close()
    End If
    Console.WriteLine(ex.Message)
    Console.ReadKey()
   End Try
  End Sub
 End Module
End Namespace
 
 


 


 

 
No hay comentarios:
Publicar un comentario