Download ADO.NET - Eduinnova
Document related concepts
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