TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso...

10
8.1 Programació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 tras acceder a los datos y durante su manipulación, cerrándola únicamente cuando se termina la operación.

Transcript of TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso...

Page 1: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

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.

Page 2: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

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.

Page 3: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del 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

Page 4: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

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.

Page 5: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

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

Page 6: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

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.

Page 7: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

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:

Page 8: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

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.

Page 9: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

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.

Page 10: TEMA 8. MODOS DE ACCESO A DATOS 8.1. DISTINTOS … · 8.2 Programación .NET (II). Modos de acceso a datos Este enfoque de acceso puede penalizar bastante el rendimiento del origen

Programación .NET (II). Modos de acceso a datos8.10