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