MICROSOFT Presentación 4: ADO Jueves, 21 de Octubre de 2004 Iván Bernal, Ph.D. imbernal@mailfie.epn.edu.ec Quito Ecuador Copyright @2004, I. Bernal Agenda Visión general de ADO 2
Bibliografía (1) D. Platt, Introducing Microsoft, 3rd Edition, Microsoft Press, 2003. ISBN:0735619182. Nota: Las transparencias de esta presentación fue elaborado tomando como referencia principal el libro de D. Platt; se utilizan ejemplos y figuras del libro de Platt. Algunos capítulos, y los ejemplos utilizando C# y VB están disponibles gratuitamente en: www.introducingmicrosoft.net El presente material (transparencias) y algunas cosas adicionales, que de seguro encontrarán interesantes, pueden obtenerlas en: wwwfie.epn.edu.ec/ibernal 3 Objetivo Presentar una visión global de las facilidades de ADO para la conexión con bases de datos. 4
Opciones previas: Introducción OLE DB - COM ADO (ActiveX Data Objects) COM Bueno para Intranets de Microsoft. No escala bien para el Internet. Poco soporte para operaciones desconectadas. introduce ADO Intenta brindar acceso universal a datos. Esconde diferencias entre proveedores de datos. Facilidad en la programación. Incluye objetos y funciones prefabricados. 5 ADO (1) Un proveedor de datos que quiere hacer accesibles sus datos a clientes con ADO, debe implementar un conjunto de objetos: Connection DataAdapter Command DataReader El desarrollador de una fuente de datos puede escribir su propia implementación de estos objetos de forma optimizada. Microsoft lo ha hecho para SQL Server. 6
ADO (2) El CLR provee estos objetos para trabajar con proveedores OLE DB. Cualquier proveedor de datos actual que entienda OLE DB, puede entender ADO automáticamente. 7 DataSet (1) ADO provee los datos en objetos de este tipo. Representa una colección de datos resultantes de consultas (queries). Contiene tablas internas y provee métodos para acceder a las filas y columnas de las tablas. Contiene un esquema que describe su estructura interna. Permite serialización XML, para transmitirse a través de los limites entre procesos y máquinas. 8
DataSet (2) 9 Sin tipo (untyped) DataSet (3) Cliente realiza pedidos especificando nombres de campos en forma de cadenas. Con tipo especifico (typed) Contiene variables miembro asociadas a cada campo individual de una tabla. Facilita la escritura de código sin errores. Existen controles para formularios Windows y Web para presentar DataSets. 10
Ejemplo (1) Ejemplo combinando ASP y ADO Utiliza objetos DataConnection y DataAdapter para solicitar toda la información de la tabla Authors en la base de datos pubs. El pedido produce un objeto DataSet el cual se presenta en una forma Web, en un control DataGrid. 11 Ejemplo (2) Código en evento Page_Load Crear objeto Connection Representa la abertura en el programa de bases de datos por la que ingresan pedidos y salen datos. Como el jack Ethernet en una pared. System.Data.SqlClient.SqlConnection System.Data.OleDb.OleDbConnection En la construcción se especifica la cadena de conexión de la base de datos que incluye: Ubicación User ID Password 12
Ejemplo (3) Crear objetodataadapter Mediador entre el objeto Connection y la aplicación cliente. Al construirlo se indica la conexión a utilizar y el comando a ejecutar (en este ejemplo: seleccionar todos los elementos de la tabla). System.Data.SqlClient.SqlDataAdapter System.Data.OleDb. OleDbDataAdapter Como la tarjeta de red en el PC. El programa cliente habla con la tarjeta de red (DataAdapter), que a su vez habla con el jack de la pared (Connection). 13 Ejemplo (4) 14
Ejemplo (5) Crear objetodataset vacío System.Data.DataSet Se llena con ayuda del objeto DataAdapter, pasando como argumentos: El DataSet. El nombre de la tabla que se desea (que no existe y se creará). No tiene que ser el mismo usado en la base de datos. Se presentan datos en DataGrid. Se cierra conexión de forma determinística. 15 Soporte de Visual Studio (1) Visual Studio tiene soporte integrado para manejar bases de datos: Server Explorer. Drag and drop la tabla Authors a forma. Se agrega SqlConnection. Se agrega SqlDataAdapter. Se agregan variables de tipo SqlCommand Todos los objetos se inicializan con valores adecuados. Se conectan las conexiones y comandos con el SqlDataAdapter. Se puede borrar código que no se utilice. 16
Soporte de Visual Studio (2) 17 Soporte de Visual Studio (3) Agrego DataSet y DataGrid a proyecto visualmente. También asociar DataGrid con DataSet. En sección "Data" seleccionar "DataSource y escoger nuestro DataSet Con DataAdapter lleno el DataSet luego de inicializar los componentes this.sqldataadapter1.fill(this.dataset1); Presentación del DataGrid: AutoFormat: classic. Layout -> anchor -> todos los lados. 18
Soporte de Visual Studio (4) 19 Ejemplo (1) Leer data del DataSet Enviar datos entre máquinas con XML. Operación desconectada. Actualización de la base de datos. Se usa un servicio Web y un cliente con una WinForm. El servicio Web está conectado a la base de datos. El servicio retorna un DataSet, que será serializado en XML y transmitido al cliente. 20
Ejemplo (2) 21 Ejemplo (3): Servicio Web 22
Ejemplo (4): Servicio Web 23 Ejemplo (5): Servicio Web 24
Ejemplo (6): Cliente Traer datos con ayuda de WS. 25 Ejemplo (7): Cliente Clase para objetos a almacenarse en lista 26
Ejemplo (8): Cliente Formulario para cambiar columna de base de datos. 27 Ejemplo (9): Cliente Cambiar localmente la columna contract de la fila seleccionada. 28
Ejemplo (10): Cliente Actualizar únicamente las filas cambiadas desde que se obtuvo el DataSet. Se obtiene un nuevo DataSet que contiene solo las filas cambiadas. 29 Ejemplo (11): Cliente No se conoce cuanto tiempo el cliente va a mantener un DataSet, no se pueden utilizar locks para evitar conflictos. Utilizar concurrencia optimista. Chequear si han existido cambios hechos por alguien mas, antes de realizar la actualización. Si existen, el Servicio Web podría reportar un error al cliente, y éste informar al usuario para que revise su actividad. Se denomina optimista, porque se espera que este proceso no sea frecuente. Se usa para sistemas en donde no existan actividades concurrentes excesivas. 30
Ejemplo (12): Cliente Compensating Transactions En un sistema de reservas de tickets de eventos. Remover un par de tickets disponibles de la base de datos (a la que se conectaran otros usuarios y verán esos tickets como no libres), cuando el usuario se conecta, asumiendo que estos serán comprados por el usuario. Realizar la operación contraria y poner los tickets de vuelta en el pool de tickets disponibles, si el usuario no los ha adquirido en 10 minutos, por ejemplo. 31 Typed DataSets (1) Soporte para evitar el escribir nombres de tablas y columnas, y cometer errores. Si escribo Auhtors en lugar de Authors Para casos en los que se realizan operaciones sobre un mismo conjunto de datos, conocidos en tiempo de diseño. Tener incluidos nombres de tablas y columnas en el código. Intellisense de Visual Studio usa esta información y es útil para el programador. Errores se detectan fácilmente con ayuda del compilador. 32
Typed DataSets (2) Con la forma visible, luego de arrastrar la tabla Authors a la forma: 33 Typed DataSets (3) 34
Typed DataSets (4) Se puede generar el nuevo conjunto de clases con XSD.exe. Requiere un XML schema que describa el data set. 35 Ejemplo (1) Se reescribe el Servicio Web del ejemplo anterior. Arrastrar la tabla Authors a Service1.asmx.cs Generar typed DataSet. Se debe escribir mucho menos código. Los objetos de conexión, DataAdapter y DataSet han sido ya creados. Todavía no se usa la clase typed Dataset. No se obtiene mejoras en el rendimiento. ASP invoca automáticamente a Dispose sobre objeto del Servicio Web, que a su vez invoca Dispose sobre sus miembros. 36
Ejemplo (2) Métodos usan ahora AuthorsTypedDataSet y se debe reescribir el cliente, incluso MyOwnListItem. 37 Ejemplo (3) Función para llenar DataSet. Se evitan errores de ortografía. 38
Ejemplo (4) 39 Ayuda de Intellisense Ejemplo (5) 40