Download ADO.NET - Eduinnova

Document related concepts

ADO.NET wikipedia , lookup

Language Integrated Query wikipedia , lookup

SQL Server Compact wikipedia , lookup

ADO.NET Entity Framework wikipedia , lookup

Inyección SQL wikipedia , lookup

Transcript
ADO.NET
Mª del Pilar Pavón Rosano
DNI: 52.923.715-W
INTRODUCCIÓN
Este artículo está dirigido a los profesores y profesoras del módulo “Diseño y
Realización de Servicios de Presentación en Entornos Gráficos” del Ciclo Formativo de
Grado Superior de Desarrollo de Aplicaciones Informáticas que quieran incluir en sus
contenidos el desarrollo con bases de datos sobre la plataforma .NET, así como a los
alumnos y alumnas de estos módulos que les interese ampliar sus conocimientos en este
campo y en general a todo el que le interese iniciarse en este entorno de desarrollo.
En este artículo vamos a ver el protocolo de acceso a datos en la plataforma .NET,
ADO.NET y su marco de funcionamiento con ASP.NET.
ARTÍCULO
El ActiveX Data Object (ADO), es un protocolo de acceso a datos, y ADO.NET
perteneciente a la plataforma .NET, se podría decir que es una nueva versión de ADO,
aunque en realidad tiene poco que ver, principalmente por la arquitectura implementada
para el modelo ADO.NET.
ADO.NET es un modelo para acceder a datos generado con base en la escalabilidad de
XML. Permite a las páginas ASP.NET presentar datos de formas muy distintas y más
eficientes.
Un aspecto interesante es que aplicaciones ADO.NET que están desconectadas o con
datos remotos, utilizan XML para la transferencia de datos entre el consumidor y el
proveedor. El XML es un lenguaje de marcas basado en texto, similar al HTML, que
permite representar datos jerárquicamente de una manera muy eficiente. La ventaja de
XML, y la razón por la que lo adoptó ADO.NET, es por la facilidad de convertirlo de un
tipo de datos a otro, es decir, no necesita complejas conversiones como ocurría con ADO,
lo que proporciona a ADO.NET un mayor rendimiento. [Payne 2004]
Esto facilita la distribución de aplicaciones en forma de servicios por Internet, lo que
es la ideología principal por la que surgió la plataforma .NET
Como hemos indicado al inicio del artículo ADO.NET conserva algunos objetos de su
antecesor ADO, pero en realidad es muy distinto:
Característica
Representación
ADO
de
datos RecordSet:
residentes en memoria.
ADO.NET
Una
tabla DataSet: Una o más tablas
objeto.
representadas por el objeto
DataTable.
Acceso a datos
Acceso secuencial a filas en Acceso aleatorio total de
un RecordSet
datos en un DataSet a través
de una jerarquía basada en
colecciones.
Acceso desconectado
Connection
y
RecordSet DataSetCommand
para comunicarse con el comunicarse
proveedor.
para
con
el
proveedor.
Acceso desconectado entre COM para manejar el objeto Transfiere un DataSet entre
sistemas multitarea.
RecordSet desde el fuente al el
consumidor.
proveedor
consumidor
y
el
como
un
fichero XML.
Relación entre varias tablas
Necesita JOIN y UNION de Utiliza objetos DataRelation
SQL para combinar datos de que pueden usarse para
varias tablas en un conjunto desplazarse
de datos.
Transferir datos a través de El
un sistema firewall
Firewall
entre
tablas
relacionadas
restringe
el Usa
HTML
basado
en
acceso a niveles del sistema adjuntar a la cabecera de
que utilizan manejo COM.
HTTP datos en XML que
pueden pasar fácilmente a
través del firewall
Tabla 1 Comparativa ADO y ADO.NET
En el centro de la arquitectura de ADO.NET está el DataSet, y se localiza en la librería
de objetos System.Data. El DataSet de ADO.NET puede entenderse como un caché en
memoria de datos que se obtienen de una base de datos y que se componen de un conjunto
de tablas, restricciones y relaciones. Un DataSet típico puede contener varios objetos
DateTable que se sostienen en el DataTableCollection. Los objetos DataTable mantienen
los datos de sus respectivas tablas de la base de datos. Para manejar las relaciones entre
tablas, la colección de relaciones (DataRelationCollection), permite relacionar las tablas
igual que en un diagrama de clases, lo que nos permite desplazarnos por las tablas
relacionadas y obtener los datos que está relacionados entre sí.
Una vez que el DataSet contiene datos, estos se representan en XML para poder
transmitirlos a otras aplicaciones. Por ejemplo, podemos pasarle un DataSet a un Web
Service (Servicio Web).
De una manera más práctica, a través del Visual Studio podemos ver cómo
funcionan los controles DataGrid junto con el DataSet en ADO.NET para desarrollar de
una manera rápida una aplicación Web, tal y como se desarrollan normalmente las
aplicaciones de escritorio.
Veamos la arquitectura de ADO.NET:
Ilustración 1 Arquitectura ADO.NET
En la Ilustración 1 vemos que el Data Provider (Proveedor de datos) de .NET está
conectado con la base de datos. A su vez, el DataSet se comunica con el Data Provider
para intercambiar los datos que se transmite y reciben en XML, hacia y desde, por ejemplo
un Servicio Web.
Otra opción, para el caso por ejemplo de aplicaciones de escritorio, hubiera sido
que conectado al DataSet tuviéramos un DataView, que es una clase especialmente
diseñada para los objetos de interfaz de usuario, para poder proporcionar vistas
personalizadas del DataSet.
En los casos en los que se hacen accesos de solo lectura, podemos saltarnos el
DataSet y el DataView y usar el DataReader, que es una parte del suministrador que nos
hará ganar tiempo.
Vamos a ver con más detalle alguno de los componentes más significativos de
ADO.NET.
Data Provider
El Data Provider ó proveedor de datos es el elemento que se conecta a la base de
datos. El proveedor encapsula todas las conexiones a una base de datos.
La plataforma .NET proporciona proveedores “nativos”, que son los que se
comunican directamente con el origen de datos (por ejemplo para SQL Server y Oracle) y
otros proveedores “puente” que se utilizan para acceder a través de OLEDB ó ODBC,
cuando no existe un proveedor nativo para un determinado origen de datos. [Alarcón 2000]
Uno de esos proveedores es SQL Server .NET que utiliza un protocolo especial
denominado TDS (Tabular DataSet Stream) para comunicarse directamente con el SQL
Server sin necesidad de OLE DB ni ODBC. Este proveedor se encuentra en la clase
System.Data.SqlClient.
Otro proveedor es el OLE DB. De acuerdo con la documentación de .NET, una
característica importante es que OLE DB .NET soporta tanto transacciones manuales como
automáticas. El proveedor OLE DB se encuentra en la clase System.Data.OleDb.
La plataforma .NET proporciona los siguientes proveedores de acceso a datos
[Alarcón 2000]:
Proveedor de Datos
Espacio de nombres
Descripción
ODBC .NET
System.Data.Odbc
Conexión a fuentes de datos a
través de ODBC
OLE DB .NET
System.Data.OleDb
Proveedor OLEDB igual que ADO
Oracle Client .NET
System.Data.OracleClient
Proveedor para acceder a Oracle.
SQL Server .NET
System.Data.SqlClient
Permite conexión optimizada a SQL
Server 7.0 y posteriores.
Tabla 2 Proveedores de acceso a datos en .NET
Los elementos de conexión son una parte importante del proveedor de datos, ya que
se usan para conectarse con ella. Estas conexiones se representan en las clases
SqlConectión y OleDbConectión para SQL Server .NET y OLE DB .NET
respectivamente. Las conexiones a la base de datos pueden abrirse de dos maneras:
-
Explícitamente llamando al método Open sobre la conexión
-
Implícitamente usando el componente DataAdapter
Otra parte importante de proveedor de base de datos son los comandos. Los
comandos contienen la información que se transmite a la base de datos como una consulta.
Los comandos están representados por las clases SqlCommand (SQL Server .NET) y
OleDbCommand (OLE DB .NET). Un comando puede ser cualquier consulta en SQL a la
base de datos. La sintaxis de los comandos soporta además parámetros de entrada y de
salida. Según Microsoft usar los comandos facilita la creación de aplicaciones seguras y de
alto rendimiento.
Desde un punto de vista funcional, los comandos viajan sobre las conexiones, y los
resultados de estas consultas son devueltos en forma de tramas, que son accesibles por un
objeto DataReader, o también pueden ser devueltas como un objeto DataSet a través del
DataAdapter.
El DataAdapter proporciona un conjunto de métodos y propiedades para recuperar
y almacenar los datos entre un DataSet y la base de datos. Es decir, coloca los datos
devueltos por la base de datos en un DataSet. También se encarga de controlar cómo deben
de actualizarse los datos en la base de datos. El método Fill del DataApdater llama al
comando SELECT, mientras que el método Update llama a los comandos INSERT,
UPDATE ó DELETE por cada fila modificada.
Mientras que el DataAdapter se conecta a la base de datos para obtener o actualizar
datos, el DataSet mantiene esos datos almacenados.
Ilustración 2 Diagrama de funcionamiento del DataAdapter y el DataSet.
Hay casos en los que no son necesarios lo objetos DataAdapter y DataSet, en estos
casos se usa el objeto DataReader.
El DataReader proporciona métodos y propiedades que devuelven un conjunto de
filas de la base de datos a las que solo puede accederse de manera secuencial. Cuando se
usa el objeto DataReader el resto de partes del modelo de ADO.NET se mantiene al
margen, lo que proporciona un acceso a los datos más rápido y eficiente. Este objeto es una
novedad de ADO.NET frente a ADO.
Veamos a través de un diagrama cómo funciona el objeto DataReader:
Ilustración 3 Funcionamiento del DataReader
En este escenario, el método ExecuteReader del objeto Command envía al objeto
Connection, el comando el Command.CommandText, y este a su vez construye una trama
con el resultado que devuelve con el DataReader. El DataReader se usa cuando no es
necesario actualizar ningún dato.
DataSet
Un elemento también muy importante, y al que hemos hecho ya referencia varias
veces a lo largo del artículo, es el DataSet.
El DataSet representa una caché de datos que contiene tablas, columnas, relaciones
y restricciones. Un DataSet se comporta como si fuera una base de datos, sin embargo, los
objetos DataSet no interactúan directamente con la base de datos, sino que lo hacen a
través del DataProvider.
Este modelo de programación le permite al diseñador trabajar de un modo
consistente, sin tener en cuenta donde está la fuente de datos. En ADO.NET, desde datos
en una base de datos Oracle, datos de un fichero XML, datos generados por código o
introducidos por el usuario, todos pueden ponerse en los objetos DataSet.
Otra característica del DataSet, es que rastrea los cambios realizados en los datos
que mantiene antes de actualizar la fuente de datos. Por ejemplo, el método GetChanges de
un DataSet sea un segundo DataSet que contiene únicamente los datos cambiados. De esta
manera aunque tengamos un DataSet con 1.000 registros, si solo modificamos 5 de ellos,
solo será necesario almacenar en la base de datos los cambios registrados en el segundo
DataSet que contiene los 5 registros. Es muy interesante trabajar con este método del
DataSet, ya que al contener el Dataset además de las tablas, las relaciones entre ellas, una
actualización se arrastrará automáticamente a las tablas relacionadas con este cambio.
Además las tablas de un DataSet no tienen que coincidir con tablas reales de la base
de datos, ya que pueden ser resultados obtenidos de una consulta.
El DataSet puede trabajar perfectamente con datos en XML a través de métodos
como GetXml y WriteXml. En un escenario donde no hay ninguna base de datos, estos
métodos permiten el uso de ADO.NET sin necesidad de ningún proveedor de datos.
El objeto DataSet proporciona un modelo de programación consistente que trabaja
con todos los modelos actuales de almacenamiento de datos: plano, relacional y jerárquico.
Por último hablaremos del objeto DataView, muy relacionado con el DataSet. El
DataView es un objeto muy simple que proporciona métodos y propiedades que habilitan
objetos para la interfaz de usuario (UI) como el DataGrid para unirlo al DataSet. Contiene
propiedades como AllowEdit y Count que permiten a los objetos UI trabajar con los datos.
El DatView solo puede usarse unido a un DataSet, nunca con un DataReader.
CONCLUSION
Uno de los aspectos más importante de un lenguaje es el relacionado con el acceso
a datos, ya que hoy en día es raro encontrarse con una aplicación que no trabaje codo con
codo con una base de datos. Es por eso que es tan importante que un entorno de desarrollo
como .NET proporcione un manejador de acceso a datos eficiente y versátil como
ADO.NET
BIBLIOGRAFÍA Y REFERENCIAS WEB
- [Alarcón 2000] Alarcón Aguín J.M., “Programación Web con Visual Studio y
ASP.NET 2.0” Krasis Press 2007
- [Payne 2004] Payne, C. “Aprendiendo ASP.NET en 21 lecciones avanzadas”.
Editorial Pearson Educación 2004.
- http://msdn.microsoft.com/en-us/default.aspx
- http://www.codeproject.com
- http://programacionreal.wordpress.com