8.1Programación .NET (II). Modos de acceso a datos
TEMA 8. MODOS DE ACCESO A DATOS
8.1. DISTINTOS MODOS DE ACCESO EN ADO.NET
Después de haber estudiado los principales
objetos involucrados en el acceso a bases de
datos, vamos a tratar más en profundidad el
modo de acceso a los datos en función de la
conexión con el origen.
Atendiendo a la conexión podremos enfocar el
acceso a los datos de dos maneras distintas:
Acceso a datos en modo conectado
Acceso a datos en modo desconectado
Vamos a definir ambos modos y después veremos, mediante sendos ejemplos,
cómo trabajar en ellos con ADO.NET.
Acceso a datos en modo conectado
Esta forma de acceso mantiene abierta la conexión con el origen trasacceder a los datos y durante su manipulación, cerrándola únicamentecuando se termina la operación.
Programación .NET (II). Modos de acceso a datos8.2
Este enfoque de acceso puede penalizar bastante el rendimiento delorigen de datos, sobre todo si las operaciones realizadas sobre los datos
conllevan mantener la conexión a la base de datos abierta demasiado tiempo.
Por otro lado, si queremos leer una gran cantidad de datos, este modo de
acceso será el más adecuado, ya que éstos no se almacenarán en la memoria
caché, y el rendimiento de la aplicación será mayor.
Acceso a datos en modo no conectado
El modo de acceso no conectado o desconectado proporciona los medios para
acceder a datos y trabajar con ellos con independencia del origen dedatos, sin mantener abierta la conexión.
Esto no significa que no haya que establecer una conexión, pero ésta se limitará
a las operaciones de acceso, inserción o actualización de datos. De este modo
no se sobrecarga el servidor de datos, pues se libera la conexión.
Dicho de otro modo, podemos recuperar datos e inmediatamente desconectar
la conexión, trabajar con esos datos (independientes del origen), y, si es
necesario, volver a conectar y actualizarlos en el origen.
8.3Programación .NET (II). Modos de acceso a datos
Este enfoque en el acceso favorece el rendimiento del origen de datos,pues se basa en conexiones que duran lo justo.
El lado negativo se presenta si queremos recuperar un gran volumen de datos,
pues éstos se almacenan en memoria caché para su posterior acceso y
manipulación, y consumir demasiada memoria caché irá en perjuicio delrendimiento de la aplicación.
8.2. RECuPERACIóN y MANIPulACIóN DE DATOS EN MODO CONECTADO
ADO.NET está especialmente orientado al modo no conectado, pero permite
también el acceso en modo conectado. Para recuperar datos en modoconectado emplearemos la clase DataReader, que, como ya sabes,
consiste en un “lector” que podemos mover por los registros de principio a fin.
Vamos a crear un pequeño ejemplo. Partiremos de la tabla de datos que se
muestra a continuación. La recorreremos y visualizaremos sus datos en una
lista ListBox.
Para los datos de este ejemplo, podemos utilizar la base de datos que creamos
desde Visual Basic en el tema “Integrando datos con Visual Basic”.
NIF NOMBRE APELLIDOS TELEFONO
1000000A Carlos López Peña 922222222
2000000B Juan Pared Pequeña 933333333
3000000C María Hurtado Díaz 944444444
4000000D Antonio Cortés Ortiz 955555555
5000000E Raquel Méndez García 966666666
Programación .NET (II). Modos de acceso a datos8.4
En una nueva aplicación de formularios Windows, añadimos un control listBoxal formulario principal (llamado “Form1)” y la denominamos “Lista”.
En esta lista iremos añadiendo los datos de la tabla a medida que losvayamos leyendo.
Después, añadimos el código necesario para acceder a los datos en el eventoload del formulario.
A continuación mostramos el código necesario.
8.5Programación .NET (II). Modos de acceso a datos
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 conexion As New SqlConnection()
'Establecemos la cadena de conexión del objeto SqlConnection
conexion.ConnectionString = "Data Source=.\SQLEXPRESS;" _
& "AttachDbFilename=E:\nueva.mdf;" _
& "Integrated Security=SSPI;" _
& "User Instance=True"
'Conectamos con el origen
conexion.Open()
'Creamos un comando para la consulta
Dim comando As New SqlCommand( _
& "SELECT * FROM Agenda ORDER BY Apellidos", conexion)
Dim lector As SqlDataReader
'El método ExecuteReader del comando inicializa el lector
lector = comando.ExecuteReader()
'HasRows indica si la consulta devolvió o no resultados
If lector.HasRows Then
'Leemos con el lector mientras haya registros
'(Read implica leer el registro actual y saltar al siguiente)
While lector.Read
'Añadimos a la lista los datos del registro leído
Lista.Items.Add("NIF: " & lector("nif").ToString _
& " - Nombre: " & lector("nombre") _
& " " & lector("apellidos") _
& " - Teléfono: " & lector("telefono"))
End While
End If
'cerramos el lector
lector.Close()
'cerramos la conexión
conexion.Close()
End Sub
End Class
Programación .NET (II). Modos de acceso a datos8.6
Como ves, mientras leemos datos del lector, la conexión al origen de datospermanece abierta. Si cerrásemos la conexión inmediatamente después de
inicializar el lector, al probar la aplicación obtendríamos un error que indica que
no podemos acceder al lector por encontrarse éste cerrado.
Esto es así porque el cierre de la conexión implica el cierre de cualquier lector
asociado a ella. En nuestro código, hemos cerrado el lector y después la
conexión, pero en realidad hubiese bastado con cerrar la conexión para cerrar
ambos.
El acceso a datos mediante DataReader es rápido y ligero para nuestra
aplicación, pero pesa sobre él la desventaja del tiempo de conexión consumido
Recuerda que si los accesos necesarios en tu aplicación son frecuentes y no
devuelven un gran volumen de datos puede que sea más apropiado el enfoque
no conectado.
8.7Programación .NET (II). Modos de acceso a datos
8.3. RECuPERACIóN y MANIPulACIóN DE DATOS EN MODO NOCONECTADO
Veamos ahora el modo de acceso a datos no conectado o desconectado, que
es hacia el que ADO.NET está especialmente dirigido.
Los principales actores de este modo de acceso son los adaptadores y los
conjuntos de datos, implementados mediante las clases DataAdapter y
DataSet respectivamente.
Como ya hemos comentado antes, mediante el adaptador podemos recuperar
datos y usarlos para llenar un conjunto de datos. Una vez tenemos los datos
en el conjunto de datos podemos trabajar con ellos sin mantener ninguna
conexión abierta.
El adaptador de datos internamente establecerá y cerrará la conexión para
recuperar los datos y llenar el DataSet. Así, no vamos a necesitar un objeto
Connection independiente que realice la tarea de conectar y desconectar.
Vamos a realizar un ejemplo de acceso a datos en modo desconectado que
hará uso de un adaptador y un conjunto de datos. Haremos uso de Visual Basic
2008 para gnerar dichos objetos.
Partimos de un proyecto de aplicación de formularios Windows, y lo primero
que necesitamos añadir a nuestro proyecto es un adaptador de datos o
DataSet. Si este elemento no esta en el cuadro de herramientas, habrá que
añadirlo:
Programación .NET (II). Modos de acceso a datos8.8
Buscamos en el cuadro de diálogo el componente DataAdapter. Sabemos que
pertenece al espacio de nombres System.Data.SqlClient.
Una vez hecho esto, dispondremos del control SqlDAtaAdapter en el cuadro
de herramientas.
8.9Programación .NET (II). Modos de acceso a datos
A continuación añadimos el adaptador al formulario principal arrastrando el
control desde el cuadro de herramientas hasta la vista de diseño de dicho
formulario. Al hacer esto se iniciará el asistente para la configuración del
adaptador de datos.
En primer lugar habrá que elegir qué conexión usará el adaptador.Podemos crear una nueva, como anteriormente ya vimos, o usar una conexión
existente. Nosotros vamos a usar la conexión que creamos en el tema
"Integrando datos con Visual Studio".
Luego, como tipo de comando elegimos usar instrucciones SQl. De este
modo podemos escribir directamente la consulta SQL que obtenga los datos
que deseamos, o bien utilizar el generador de consultas SQL a modo de
asistente.
Programación .NET (II). Modos de acceso a datos8.10