¿Trabaja DataReader en un ambiente conectado realmente?
Pese a todo esto, ¿que ocurre si trabajando en un ambiente conectado se desconecta el servidor de acceso a datos?.
Imaginemos por un instante, que la conexión con SQL Server se establece correctamente y que en un momento dado se detiene el servicio del servidor de base de datos.
Esto es lo que veremos en el siguiente ejemplo.
Desenchunfando la fuente de datos usando DataReader
Inicie un nuevo proyecto, inserte en el formulario de la aplicación un control TextBox y un control Button, y escriba el código que se detalla a continuación:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Xml
Public Class Form1
Private Conexion As String = "server=.;uid=sa;password=VisualBasic;database=MSDNVideo"
Private strSQL As String = "SELECT TITULO FROM ALQUILERES, PELICULAS WHERE PELICULACODBARRAS = CODBARRAS AND SOCIONIF = '111111'"
Private MiConexion As New SqlConnection(Conexion)
Private MiDataReader As SqlDataReader
Private Contador As Long = 0
Private Posicion As Long = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Establecemos la Conexión con la base de datos
Establecer_Conexion(True)
' Si hay datos los mostramos, sino deshabilitamos
' la opción (botón) para recorrerlos
If Not MiDataReader.HasRows Then
Button1.Enabled = False
Else
Button1_Click(sender, e)
End If
End Sub
Private Sub Establecer_Conexion(ByVal bolAccion As Boolean)
Dim Comando As SqlCommand
If bolAccion Then
' True => Establecemos la conexión
Comando = New SqlCommand(strSQL, MiConexion)
' Abrimos la Conexión
MiConexion.Open()
' Ejecutamos la sentencia SQL
MiDataReader = Comando.ExecuteReader()
' Obtenemos la cantidad de registros obtenidos
Contador = MiDataReader.VisibleFieldCount() + 1
Else
' False => Finalizamos la conexión
Button1.Enabled = False
' Cerramos la Conexión
Comando = Nothing
MiConexion.Close()
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Recorremos los registros y los mostramos
Posicion += 1
MiDataReader.Read()
TextBox1.Text = MiDataReader("TITULO")
' Si hemos recorrido el objeto por completo,
' finalizamos la Conexión y deshabilitamos el control
' Button que nos permite recuperar los registros
If Posicion = Contador Then
Establecer_Conexion(False)
End If
End Sub
End Class