acceso a datos con ado .net 3.5 (ejemplo)

Upload: ney-galecio

Post on 17-Jul-2015

253 views

Category:

Documents


0 download

TRANSCRIPT

Acceso a datos con ADO .NET 3.5Jos Luis Hevia / ngel Rayo

Sipnosis Esta obra sirve como referencia para todo programador que trabaje en la plataforma .NET y necesite acceso a datos desde sus aplicaciones. Sirve, adems como texto de base para la preparacin del examen oficial 70-561 (ADO.NET), parte de las certificaciones MCTS y MCPD de Microsoft La primera parte del libro muestra los conceptos de ADO.NET relativos a acceso a datos conectados, desconectado adems del proceso de sincronizacin de ellos con los gestores de bases de datos relacionales. Los ltimos captulos cubren las novedades de ADO.NET 3.5 como son LINQ y sus variantes LINQ to Objects, LINQ to DataSet, LINQ to DataSet, LINQ to SQL y Entity Framework.

Jose Luis Hevia es ingeniero informtico y lleva mas de 12 aos dedicado a la consultora, la formacin y el desarrollo, especializado como arquitecto de software en tecnologas como .NET framework, Java y COM y el ecosistema de productos que las conforman. Ha escrito multitud de libros relacionados con estas tecnologas y su aplicacin prctica en las arquitecturas empresariales. Colabora en revistas especializadas del sector y mantiene su propio blog en: www.heviatec.net.

ngel Rayo es formador de Alhambra-Eidos desde 2004. Ha sido el autor y coautor de varios libros entre los que destaca el titulado "Administracin y Desarrollo con WSS 3.0 y MOSS 2007" centrado en Microsoft SharePoint as como otros relacionados con la plataforma .NET. Adems, ha escrito artculos para dotnetmana sobre el ciclo de vida de desarrollo de software con Visual Studio Team System, MSF y CMMI. Ha participado en ponencias sobre SharePoint 2007, Visual Studio Team System y Symbian. Posee las certificaciones MCPD Enterprise en .NET 3.5, MCITP en SQL Server 2008 y MCTS en SharePoint 2007 principalmente. Est certificado como formador oficial de Microsoft, EXIN y Nokia+Symbian, siendo en esta ltima certificacin uno de los dos nicos profesionales autorizados en Espaa. Dentro de la gestin de procesos posee las certificaciones en ITIL (v2 y v3), ISO 20000 y MOF v4.0.

Luarna

Acceso a datos con ADO.NET 3.5 Jose Luis Hevia y ngel Rayo, Alhambra Eidos De esta edicin: 2009, Luarna Ediciones, S.L. www.luarna.com

Madrid, octubre de 2009

ISBN: 978-84-92684-47-2 Versin 1.0 (05-10-2009)

Cualquier forma de reproduccin, distribucin, comunicacin pblica o transformacin de esta obra solo puede ser realizada con la autorizacin de sus titulares, salvo excepcin prevista por la ley. Dirjase a CEDRO (Centro Espaol de Derechos Reprogrficos, www.cedro.org) si necesita fotocopiar, escanear o hacer copias digitales de algn fragmento de esta obra.

Acceso a datos con ADO.NET 3.5Jose Luis Hevia y ngel Rayo

IndiceADO.NET 2.0 .................................................................................................................................. 11 Introduccin .................................................................................................................................. 11 ADO.NET 1.1 versus ADO.NET 2.0. Madurez de una arquitectura. .............................................. 12 Beneficios de ADO.NET............................................................................................................... 14 ADO.NET: Arquitectura de datos desconectados........................................................................... 16 Los Datos se almacenan en DataSets y tambin en DataTables ..............................................17 Los DataSets/DataTables son independientes de los orgenes de datos ........................................... 18 Los Datos persisten en forma de documento XML ........................................................................ 18 Los Esquemas: Metadatos de los documentos XML ............................................................... 19 Componentes de ADO.NET ...................................................................................................... 20 Arquitectura orientada a conexin ................................................................................................. 22 Los proveedores gestionados de datos. Los .Net Providers .................................................. 22 La arquitectura de los .NET Provider ......................................................................................... 23 Una nueva aproximacin: Factoras de conexiones .................................................................... 24 Un nuevo participante: SQL Server 2005 ...................................................................................... 25 Nuevas herramientas de diseo de capas de datos .......................................................................... 26 Los ejemplos del texto .................................................................................................................. 26 La experiencia adquirida de ADO.NET ......................................................................................... 27 Arquitecturas de aplicaciones ........................................................................................................ 27 Diferentes almacenamientos de los datos ................................................................................... 28 Determinacin del modo de recuperacin de los datos ............................................................... 29 Modelos de diseo de aplicaciones distribuidas ......................................................................... 30 Buenas prcticas.................................................................................................................... 31 ADO.NET .................................................................................................................................... 33 DataSet ..................................................................................................................................... 35 Las clases conectadas a datos ...................................................................................................35 Optimizacin de los recursos: patrones asncronos ..................................................................... 37 Transacciones distribuidas: una realidad .................................................................................... 38 ADO.NET y XML ........................................................................................................................ 38 Las clases de ADO.NET ............................................................................................................... 39 NameSpaces.............................................................................................................................. 39 Clases Desconectadas de datos ..................................................................................................40 Clases especficas de un proveedor de datos (Conectadas a Datos)............................................. 40 Conexiones a Datos ......................................................................................................................... 42 Las conexiones a datos .................................................................................................................. 42 .NET Data Providers ..................................................................................................................... 43 Repasando lo existente: DAO y ODBC, ADO y OLEDB........................................................... 44 Proveedores de datos .NET........................................................................................................45 Definiendo conexiones .................................................................................................................. 47 Cadenas de conexin ..................................................................................................................... 47 El buen hacer con los lenguajes ............................................................................................. 50 Algunos usos importantes de los objetos de conexin ............................................................ 51 Ejemplos de cadenas de conexiones........................................................................................... 52 Seguridad en el acceso a los datos ............................................................................................. 55 Proceso de eventos de conexin .................................................................................................... 56 Captura del evento StateChange ................................................................................................ 57 Deteccin de mensajes de Error / Informacin ........................................................................... 61 InfoMessage .......................................................................................................................... 61 Manejadores de excepciones estructurados ............................................................................ 66 El balanceo de conexiones............................................................................................................. 69 Lo que haba hasta ahora ....................................................................................................... 69 Pgina |5

El Pool de conexiones. ADO.NET Forever!............................................................................... 70 Los parmetros de control del Pool de conexiones en la cadena de conexin .............................. 72 Utilizar el Analizador de SQL Server 2000... ............................................................................. 73 Otra demo, con el analizador de SQL 2005 ................................................................................ 76 Enumeracin de servidores SQL Server ........................................................................................ 77 Generacin de cadenas de conexin .............................................................................................. 79 Operaciones Conectadas a Datos .................................................................................................... 82 OPERACIONES conectadas a datos ............................................................................................. 82 Ejecutar comandos: XxxCommand ............................................................................................... 83 La creacin de un objeto XxxCommand ........................................................................................ 83 Las diferentes maneras de hacer las cosas. Tipos de comandos. ..................................................... 84 Ejecucin de comandos y obtencin de respuestas ..................................................................... 86 ExecuteReader y los lectores de datos (DataReader) .............................................................. 87 ExecuteScalar. Recuperacin de valores simples ................................................................ 96 DML de actualizacin, DCL y DDL ...................................................................................... 97 Los parmetros en SQL ................................................................................................................. 99 Asignacin de parmetros ....................................................................................................... 100 Tipos de parmetros: Entrada, Salida, Valor de retorno... ......................................................... 102 No slo de procedimientos vive el hombre............................................................................... 105 Operaciones asncronas ............................................................................................................... 107 El API asncrono de ADO.NET 2.0 ......................................................................................... 108 El algoritmo asncrono ............................................................................................................ 108 Nuevos comandos de SqlClient ................................................................................................... 113 SqlBulkCopy .......................................................................................................................... 114 SqlDependency ....................................................................................................................... 115 Consideraciones finales ............................................................................................................... 120 API independiente del fabricante ................................................................................................. 121 Introduccin................................................................................................................................ 121 Las factoras de clases ................................................................................................................. 122 Factoras de clases de ADO.NET ................................................................................................ 123 El proceso de conexin............................................................................................................ 124 Enumeracin de los proveedores instalados ......................................................................... 124 Especificar el proveedor en tiempo de ejecucin .................................................................. 125 Conexiones Parametrizadas ................................................................................................. 126 Operaciones conectadas independientes del proveedor ............................................................. 129 Operaciones Desconectadas de los Datos ..................................................................................... 133 Operaciones desconectadas ......................................................................................................... 133 Evolucin en ADO.NET 2.0.................................................................................................... 135 Arquitectura de DataSet .............................................................................................................. 135 Independencia del origen............................................................................................................. 136 Construyendo Dataset ................................................................................................................. 137 Creando la base de datos: DataSet, DataTable y DataColumn ............................................... 139 Expresiones en las columnas: Campos Calculados ................................................................... 142 Constraints y las propiedades de las columnas ......................................................................... 143 Claves primarias (PrimaryKey Constraints) ......................................................................... 145 Claves ajenas (ForeignKey Constraints)............................................................................... 146 Relaciones entre tablas: DataRelation ...................................................................................... 147 El proceso de los datos ................................................................................................................ 149 Consultas de tablas .................................................................................................................. 149 Consultas a vistas .................................................................................................................... 152 Inserciones, modificaciones y borrados ................................................................................... 154 Insertar nuevos datos ........................................................................................................... 154 Modificar datos ................................................................................................................... 155 Pgina |6

Borrar Datos ........................................................................................................................ 156 Los eventos de las tablas. ........................................................................................................ 157 El control de versiones ............................................................................................................ 158 XML. Persistencia estndar en ADO.NET................................................................................... 161 DataSet ................................................................................................................................... 162 DataTable ............................................................................................................................... 167 Lecturas de datos conectadas a DataTable ............................................................................ 170 Finalizando este tema .............................................................................................................. 171 DataSet y las Fuentes de Datos ..................................................................................................... 172 Una filosofa independiente del fabricante ................................................................................... 172 ANSI SQL92. Primera solucin a un problema....................................................................... 173 ODBC, OLEDB, Conexiones, RPC... ...................................................................................... 173 Ver la luz... con XML.............................................................................................................. 174 Carga desde un .NET Data Provider ............................................................................................ 176 Carga de un DataSet a partir de consultas no XML. ................................................................. 177 Carga de datos a partir de consultas XML................................................................................ 180 Actualizacin de datos. Sincronizacin. ................................................................................... 185 El Diffgram ......................................................................................................................... 187 Uso de GetChanges() ........................................................................................................... 188 Merge( ) .............................................................................................................................. 189 El mtodo Select( ) .............................................................................................................. 189 A vueltas con los conflictos de sincronizacin ..................................................................... 190 DbCommandbuilder ................................................................................................................ 192 Actualizaciones en BATCH en ADO.NET 2.0 ..................................................................... 193 Un ejemplo que lo resume ............................................................................................... 193 Carga de datos desde XML ......................................................................................................... 197 Visual Studio .NET y XML ..................................................................................................... 201 De esquema a XML............................................................................................................. 201 De XML a esquema ............................................................................................................. 206 Carga desde flujos de datos streams- ......................................................................................... 207 DataSet y orgenes heterogneos ................................................................................................. 211 Transacciones con ADO.NET....................................................................................................... 213 Las operaciones protegidas: transacciones ................................................................................... 213 Las transacciones al detalle ......................................................................................................... 215 La clase XxxTransaction ......................................................................................................... 217 Los niveles de aislamiento ....................................................................................................... 218 Transacciones desde el lenguaje SQL ...................................................................................... 221 Subniveles transaccionales (slo para SQL Server!) ................................................................ 222 Procedimientos Almacenados .................................................................................................. 223 Normas ACID ......................................................................................................................... 224 El nuevo API transaccional de ADO.NET 2.0 ............................................................................. 225 Novedades del API System.Transactions ................................................................................. 225 Para utilizar el nuevo API, se requiere un ensamblado ......................................................... 226 Transacciones explcitas .......................................................................................................... 227 Transacciones implcitas ......................................................................................................... 229 Transacciones distribuidas ....................................................................................................... 231 EnterpriseServices ................................................................................................................... 231 DataSet y los Servicios WEB ........................................................................................................ 232 De una arquitectura distribuida a la arquitectura distribuida .................................................. 232 Los servicios web........................................................................................................................ 234 Datos en servicios web ................................................................................................................ 235 Consumo de un Servicio Web Estndar. .................................................................................. 236 Creacin del servicio web .................................................................................................... 236 Pgina |7

Creacin del cliente web ...................................................................................................... 240 Consumo de servicios web no estndar ........................................................................................ 243 La evolucin de la bestia: SQL Server Web services ................................................................... 244 Visual Studio .NET 2005 y los servicios de datos (I) .................................................................... 248 Un IDE completamente renovado ................................................................................................ 248 Diseando la capa de datos: Data Designer .................................................................................. 251 Orgenes de datos. Comenzando con planificacin ............................................................... 252 Data Source Explorer .............................................................................................................. 254 El Diseador de datos (Data Designer) .................................................................................... 258 TableAdapter Configuration Wizard ........................................................................................ 260 Ampliando la funcionalidad de un adaptador ....................................................................... 263 La infraestructura de la arquitectura......................................................................................... 265 Agregar nuevos orgenes a un componente ya configurado ...................................................... 266 Establecer relaciones en la lgica de datos ............................................................................... 267 Otras herramientas del entorno .................................................................................................... 268 Visual Studio .NET 2005 y los servicios de datos (II): WinFORMS............................................ 271 Vnculo a datos desde WinForms ................................................................................................ 271 Preparar el entorno de la demo .................................................................................................... 272 Vincular controles a datos sin esfuerzo. Formularios sencillos. ................................................ 273 Modificar el diseo del formulario .......................................................................................... 275 Formularios Maestro-Detalle ....................................................................................................... 276 Vinculacin avanzada de datos en Windows................................................................................ 281 Parmetros en consultas de datos ............................................................................................. 281 Personalizacin avanzada de DataGridView: Imgenes. .......................................................... 284 Personalizacin avanzada DataGridView: columnas multi-evaluadas....................................... 286 Vincular origen de tipo Objeto a proyectos Windows .............................................................. 288 Consideraciones finales ............................................................................................................... 292 Visual Studio .NET 2005 y los servicios de datos (III): ASP.NET ............................................... 294 Vnculo a datos desde ASP.NET ................................................................................................. 294 El entorno de ASP.NET .............................................................................................................. 295 Formularios sencillos enlazados a datos ...................................................................................... 296 Formularios basados en parmetros ............................................................................................. 298 Formulario maestro-detalle ......................................................................................................... 299 Otros controles de datos, con ms opciones ................................................................................. 303 Un caso particular ................................................................................................................... 304 Y para terminar... ........................................................................................................................ 305 Fundamentos de LINQ ................................................................................................................. 307 Consultas en LINQ .................................................................................................................. 308 Operaciones bsicas de consulta en LINQ ............................................................................ 311 Obtencin de un origen de datos ...................................................................................... 312 Filtrado de datos .............................................................................................................. 312 Ordenacin de los resultados ........................................................................................... 312 Agrupacin ...................................................................................................................... 313 Unin .............................................................................................................................. 314 Seleccin de datos ........................................................................................................... 314 Operadores de consulta estndar .............................................................................................. 315 Modo de ejecucin de los operadores de consulta estndar ................................................... 317 Modo de ejecucin inmediata (Immediate) ....................................................................... 317 Modo de ejecucin aplazada (Deferred) ........................................................................... 317 Profundizacin en los operadores de consulta ...................................................................... 318 Operaciones de proyeccin .............................................................................................. 320 Operaciones de filtrado .................................................................................................... 325 Pgina |8

Operaciones de ordenacin .............................................................................................. 326 Operaciones de agrupacin .............................................................................................. 328 Operaciones de manejo de conjuntos (Set) ....................................................................... 330 Operaciones cuantificadoras ............................................................................................ 332 Operaciones de particionado de datos .............................................................................. 334 Operaciones de combinacin ........................................................................................... 335 Operaciones de generacin .............................................................................................. 337 Operaciones de igualdad .................................................................................................. 338 Operaciones de elementos ................................................................................................ 339 Operaciones de conversin de tipos de datos .................................................................... 340 Operaciones de concatenacin ......................................................................................... 343 LINQ to XML ............................................................................................................................... 346 Diferencias entre tecnologas XML ......................................................................................... 346 LINQ to XML vs DOM ....................................................................................................... 346 LINQ to XML vs XmlReader .............................................................................................. 350 LINQ to XML vs XSLT ...................................................................................................... 350 LINQ to XML vs MSXML.................................................................................................. 350 LINQ to XML vs XmlLite ................................................................................................... 351 Clases de LINQ to XML ......................................................................................................... 351 La clase XDocument ........................................................................................................... 352 Ejemplos de uso de los mtodos y propiedades de la clase XDocument ............................ 353 La clase XElement .............................................................................................................. 355 La clase XAttribute ............................................................................................................. 358 Consultas de rboles XML con LINQ to XML ........................................................................ 359 Bsqueda de elementos ....................................................................................................... 360 Seguridad en LINQ to XML .................................................................................................... 361 Herramientas asociadas con LINQ to XML ............................................................................. 361 LINQ to DataSet ........................................................................................................................... 364 Visin general de LINQ to DataSet ......................................................................................... 365 Clases de LINQ to DataSet ...................................................................................................... 366 DataTableExtensions y DataRowExtensions ........................................................................ 366 EnumerableRowCollectionExtensions ................................................................................. 367 EnumerableRowCollection .................................................................................................. 367 EnumerableRowCollection .................................................................................... 367 OrderedEnumerableRowCollection ..................................................................................... 369 TypedTableBase ........................................................................................................... 369 Consultas contra DataSet ......................................................................................................... 369 Consultas contra un DataSet no tipado ................................................................................. 370 Consulta contra un DataSet tipado ....................................................................................... 370 Uso del mtodo CopyToDataTable ...................................................................................... 371 Modificacin del valor de un campo de una tabla ................................................................. 371 LINQ to SQL ................................................................................................................................ 373 Creacin de la estructura de datos ............................................................................................ 375 Creacin de las entidades ..................................................................................................... 375 Creacin de las columnas de las entidades ........................................................................... 379 Creacin de asociaciones ..................................................................................................... 381 Clase AssociationAttribute .............................................................................................. 383 Clase EntitySet ................................................................................................................ 384 Creacin de la estructura de datos con Visual Studio 2008 ................................................... 385 Clase DataContext ............................................................................................................... 386 Uso del origen de datos LINQ en nuestras aplicaciones ........................................................... 396 ADO.NET Entity Framework ...................................................................................................... 401 Pgina |9

Entity Data Model ................................................................................................................... 402 Clase ObjectContext ............................................................................................................ 410 Servicios de Objetos ................................................................................................................ 412 LINQ to Entities ...................................................................................................................... 413 Lenguaje Entity SQL............................................................................................................... 415 Introduccin al desarrollo con SQL Server 2005: SQLCLRS..................................................... 418 La evolucin de la bestia ............................................................................................................. 418 Procedimientos almacenados estandar ......................................................................................... 420 Procedimiento almacenado sencillo ......................................................................................... 420 Procedimientos con parmetros ............................................................................................... 424 Consultas DML ....................................................................................................................... 425 SQLContext ............................................................................................................................ 425 Procedimiento de cursores dinmicos .......................................................................................... 426 El diseo de nuestra BDD ACME ................................................................................................ 428 El diseo de ACME .................................................................................................................... 428 Ajustar SQL Server 2005 ............................................................................................................. 431 Instalar AdventureWorks ............................................................................................................ 431 Ajustar las habilidades de SQL Server 2005 ................................................................................ 433

P g i n a | 10

ADO.NET 2.0Introduccin.NET es una tecnologa ya ms que asentada. Durante casi 2 aos ha estado subiendo del podio de la novedad al escaln de la necesidad. Para cualquier tipo de proyecto, .NET se ha convertido en una herramienta ms que valorada y de la que un alto porcentaje de negocios ya no pueden prescindir. Durante 2 aos ha demostrado ser lo robusta y efectiva que es, recibiendo el apoyo total de todos los que estamos implicados en los departamentos de TI. Durante estos 2 aos de vida, la maquinaria de Microsoft no ha dejado de trabajar y pensar. .NET no se estanca y no hace ms que crecer. Podramos considerar estos dos aos como un periodo de gestacin que ya llega a su madurez. Y el fruto de ese cambio de adolescente a adulto se plasma con la nueva versin de estas herramientas: .NET 2.0. Y esa madurez nos trae una enorme cantidad de novedades que realmente justifican este cambio de versin. Cambios en todos los niveles del framework, fruto de un estudio profundo de lo existente, y una captura intensiva de nuevos requisitos en las que hemos estado implicados todos nosotros. Desde el propio motor del CLR, pasando por la adicin de numerossimas clases nuevas, reestructurando por completo el motor de ASP.NET hasta llegar a la evolucin de uno de los mejores editores de desarrollo del mundo: el flamante Visual Studio 2005. De todas estas novedades, os iris empapando a lo largo de toda la serie de textos que se os ofrecer en nuestra editorial. Por la parte que me toca, me centrar en uno de los temas que a todos nos apasionan P g i n a | 11

y que son pieza estructural bsica de todo sistema de informacin: las herramientas de la capa de datos. Y que mejor que el nuevo ADO.NET 2.0 para abordar esas tareas En el presente texto, hablaremos del modelo de clases de ADO.NET 2.0, pero haciendo un fuerte repaso de aquel modelo que ya se planteaba desde ADO.NET 1.1, como no puede ser de otra forma. Si, ya existen libros incluso de este autor- que hablan de ADO.NET 1.1. Entonces para qu hablar otra vez de lo mismo pues la razn es que hay novedades incluso en el modelo de clases que ya conocemos, por eso ser bueno que repasemos y ampliemos. Pues nada, pasamos a ver a vista de pjaro la lista de cambios y pasamos ya a la chicha

ADO.NET 1.1 versus ADO.NET 2.0. Madurez de una arquitectura.ADO.NET 1.1 ya signific un cambio importante respecto al modelo planteado por las tecnologas pre.net (ADO, OLE DB, COM). ADO.NET 2.0 no es un cambio tan trascendental, ms bien es una renovacin basada en la madurez de la arquitectura anterior. Y en todo proceso de madurez siempre aparecen nuevas formas de hacer las mismas cosas adems de mejorar aquellas existentes. Se asientan las que ya funcionaban, se revisan las que podan mejorarse y se definen nuevas estrategias para abordar ms y ms complejos contextos -Esta sera la mejor definicin del modelo de ADO.NET 2.0-. Si comparamos ambas arquitecturas, podremos sacar las siguientes conclusiones:Lo que funciona no lo toques El modelo de clases de ADO.NET 1.1 se mantiene impecable. Esto facilita la transicin a la nueva plataforma sobremanera. Pero con una ventaja: CLR 2.0 es ms potente, ms eficiente y ms seguro. Las mismas clases de ADO.NET 1.1 sern ms efectivas en 2.0 El modelo de clases de ADO.NET 1.1 ya cubra un extenso conjunto de posibles contextos. Pero a veces en casos concretos no era tan preciso tanto en funcionalidad como en diseo. As que en ADO.NET 2.0 se amplan las funcionalidades de las clases conocidas, para dotarlas de ms precisin en esos casos concretos. El mismo camino con la mitad de cdigo. No os confiis pues, ya que las clases que ya conocis han mejorado. De todo se aprende. APIs asncronos y nuevas utilidades para ser ms productivos en los proveedores .NET. Lo que no iba fino, mejralo El obtener un framework perfecto es una ardua tarea. Pero que no sea por esfuerzos. En ADO.NET 1.1 haba pecadillos que se han rediseado en ADO.NET 2.0. Hay casos como el de DataSet que producan retardos asombrosos y un consumo masivo de recursos. La experiencia del uso con este pedazo de clase, han llevado a los ingenieros de Microsoft ha redisearla desde cero para conseguir unos tiempos de respuesta impresionantes con el mnimo consumo de recursos: hace lo mismo pero mejor que nunca. Veremos en el presente texto cmo analizar esto. Conclusin: Lo que exista, se mantiene en funcionalidad, pero mejora en diseo interno. El mismo cdigo, de nuevo, es potenciado hasta los lmites en 2.0 respecto a 1.1. Baste como ejemplo citar que una operacin de agregacin de filas indexadas en DataSet 1.1 tarda alrededor de 5 horas, lo que l mismo cdigo en DataSet 2.0 tarda no llega al minuto. Ah queda eso.

Lo que funciona, amplalo

P g i n a | 12

Nuevas herramientas

Ms contextos de anlisis llevan al desarrollo de nuevas formas de abordarlos. Por lo tanto, en ADO.NET 2.0 tena que haber mejoras. Nuevas clases y adaptacin de las existentes para contemplar las nuevas clases. Por ejemplo, se introducen los conceptos de carga dinmica de proveedores, posibilitando la independencia del sistema gestor. De estas novedades, los siguientes cuadros de esta tabla Se incorporan los nuevos tipos Nullables capaces de almacenar valores nulos incluso en tipos bsicos de datos. Muy tiles cuando se trata de evaluar valores de retorno en consultas SQL orientadas a objetos. Empleando patrones de diseo y aprovechando tecnologas ya presentes en el framework, se ofrece la posibilidad de acceder a cualquier proveedor de datos de forma abstracta. Esto es, que podemos escribir cdigo conectado con independencia del proveedor de datos. DataSet es un objeto verstil como pocos en el mundo de la informtica. Pero el problema es que en muchos contextos se vuelve demasiado pesado. Es por esto que ha decidido ampliar la familia: DataTable se convierte en otra pieza de responsabilidad, pudiendo vivir fuera del nido con la misma potencia que su padre: la capacidad de serializarse. Lo que lo convierte en una isla de datos de fcil portabilidad que reduce la carga de recursos y el ancho de banda en las comunicaciones. Esto claro, posibilita que el propio framework de ADO.NET abuse de este objeto cuando antes lo haca de DataSet. Llevando a nuevas sobrecargas del API ya conocido. Acompaando al estreno de .NET 2.0 aparece en el escenario el novsimo SQL Server 2005. No es una versin ms de SQL Server. Es LA versin de SQL Server. Slo con esto, nos podremos imaginar que un producto que ha estado en la mquina de la ingeniera de SW ms de 5 aos, nos ofrece en funcionalidad. Y la implicacin que esto tiene en el proveedor de ADO.NET 2.0. Slo un tema entero para hablar de esto. OLE DB ha seguido siendo una pieza clave de las capas de datos en Windows. Lgico es, que si mejora la plataforma, Windows siga detrs. OLE DB ofrece mejor soporte nativo a .NET y ofrece ms y mejores mecanismos de acceso a los datos, aprovechando las interfaces OLE DB al mximo. Mejor soporte, ms funciones de Windows incorporadas. Por ejemplo, el pool de conexiones para todo OLE DB. El mayor cuello de botella de DataSet se ha producido siempre a la hora de sincronizar los datos despus de sesiones intensivas desconectadas. Ahora, en sus tripas, se ha rediseado la replicacin con mejores contextos, ms control transaccional y un cdigo Diffgram optimizado. A la par que el modelo de clases es capaz de generar de forma automtica el conjunto de sentencias SQL necesarias para poder vivir de forma asncrona con el sistema gestor. Ante operaciones complejas y de movimientos masivos de datos, ADO.NET 1.1 tena el problema de abordar la ejecucin de comandos de forma sncrona. Lo que obligaba al desarrollador a crear hilos de ejecucin y sincronizarlos para evitar retardos en la ejecucin de los sistemas de informacin (en especial la capa de UI). En el nuevo modelo de funcionalidades de ADO.NET 2.0 todos los

Nuevos tipos de datos

Factoras de proveedores y el API independiente del proveedor de datos.

DataTable se independiza

Mejores proveedores de datos: SQL Server 2005

Mejores proveedores de datos: OLE DB

Rendimiento

Optimizacin

P g i n a | 13

mtodos considerados potencialmente complicados, gozan de dos sobrecargas: la sncrona y la asncrona. De tal forma que el desarrollador no es responsable del modelo de ejecucin paralelo. Slo de ejecutar y esperar la seal (evento) oportuna. Otra novedad grande: la capacidad de serializar DataSet empleando un protocolo binario propietario en el caso de escribir sistemas basados en remoting. Reduccin de ancho de bando=optimizacin del rendimiento. Nuevo modelo de control de Transacciones Ahora contaremos siempre que el proveedor nativo de las herramientas oportunas- con transacciones distribuidas y un mejor control de las transacciones atmicas. Distribucin y control fino de bloqueos= nuevo espacio de nombres System.Transactions. Aprovechando toda la potencia del dispensador de transacciones de COM+, ahora tenemos control total de la transaccin en nuestros productos. La potencia que brinda DataBinding es la de reducir el cdigo de la capa UI que consume datos a la mnima expresin. Mejores controles, ms contextos de uso, Databinding impecable. La novedad: el nuevo control DataBindingNavigator. Formularios conectados a cdigo, sin prcticamente lneas de cdigo y con la navegacin automatizada. Lo mejor para el final La nueva arquitectura de modelo de capa de datos: La evolucin de los DataSets tipados. Los nuevos DataAdapters permiten crear una arquitectura de datos completa, sin necesidad de codificar. Independiente de los proveedores, son capaces de encapsular cualquier tipo de operacin de acceso a una base de datos. Y lo ms importante: con todas las herramientas de consultas, consultas parametrizables y operaciones MDL1. E integrado con los asistentes de Visual Studio!

Nuevas herramientas de DataBinding

Y esto es slo el principio. Si alguien pensaba que los cambios de ADO.NET 2.0 eran mnimos, que se agarre los machos, que tenemos muchas cosas que ver.

Beneficios de ADO.NETADO.NET 2.0 ofrece una buena cantidad de mejoras respecto a modelos anteriores de ADO y ADO.NET. Los beneficios los podremos agrupar en las categoras: Mejor Interoperabilidad Las aplicaciones basadas en ADO.NET recogen la ventaja de la flexibilidad y la masiva aceptacin del estndar XML para el intercambio de datos. Puesto que XML es el estndar de envin de informacin entre capas, cualquier componente capaz de Interpretar los datos XML puede acceder a la informacin de ADO.NET se encuentre donde se encuentre, y procesarla. Adems, puesto que la informacin se enva en flujos de XML, no importa la implementacin empleada para enviar o recoger la informacin as como la plataforma empleada-. Simplemente se exige a los componentes que reconozcan el formato XML empleado para el proceso, envo y recepcin de un Dataset.

1

Lenguaje de manipulacin de datos. Comandos SQL Insert, Delete y Update.

P g i n a | 14

En ADO.NET ahora incluso es posible emplear el nuevo modelo de DataTable para serializar la informacin. Puesto que se almacena informacin ms concreta, se pueden abordar muchos ms contextos ms optimizados que en la versin anterior. En lugar de cachear todo un Dataset, slo necesitaremos cachear aquellas tablas que se requieren. Por lo tanto, un modelo de datos ms granular y por lo tanto ms optimo. Mantenimiento En el ciclo de vida de una aplicacin los cambios poco sustanciales y modestos son permisibles. Pero cuando es necesario abordar un cambio estructural o arquitectnico del sistema, la tarea se vuelve demasiado compleja y a veces inviable. Esto es una gran desventaja de los sistemas actuales, pues muchas veces esto es una necesidad de actualizacin de los procesos de la propia empresa. Adems, cuanto ms se aumenta el proceso de la operativa de la empresa, las necesidades de proceso crecen hasta desbordar las mquinas. Es por ello que se separa la estructura de un programa en varias capas. Un de esas capas es la de datos, que es fundamental desarrollar correctamente. Gracias a los Datasets/DataTables, la tarea de portar y aumentar los procesos de datos y de negocio ser mas sencillo: el intercambio de informacin a travs de XML, hace que sea ms sencilla la tarea de estructurar en ms capas la aplicacin, lo que la hace mucho ms modular y mantenible. Adems, en el nuevo modelo de clases Adaptadoras de .NET 2.0 y las herramientas de VS 2005, es posible definir todo un modelo lgico de clases que encapsulan la complejidad de la base de datos. De esta forma, cualquier cambio en la BDD (capa de datos) no necesariamente implica cambiar cdigo en la capa de servicio de datos (consumidor cliente de los datos). Esta herramienta ya estaba disponible en .NET 1.1 mediante los Datasets con tipo. Pero en esta versin se ha refactorizado para ofrecer mucha ms funcionalidad que antes. Con esto, prcticamente sin escribir cdigo, se nos proporcionar una capa de servicio de datos con todas las herramientas que se requieren, y adems con la posibilidad de mantener y ampliar su esquema con muchos ms servicios, independientemente de cmo est implementado en la BDD. Lo que funciona, automatzalo. Programacin Los programadores pueden acceder a un API de programacin estructurado, fuertemente tipificado y que adems se centra en la correcta forma de presentar las cosas. Centra en la estructura del lenguaje lo que un programador necesita para disear los programas sin dar muchos rodeos. Un ejemplo de cdigo sin tipificar:If CosteTotal > DataSet1.Tables("Cliente")(10).Columns("CreditoDisponible") then

Como se puede observar, aparecen nombres de objetos genricos del sistema que complican la lectura del cdigo, a la par que los operadores complican tambin la visin de la secuencia de acceso a los datos. Podramos interpretar lo que hace gracias a que aparecen los nombres propios de los datos que necesitamos....Veamos un ejemplo, un poco ms tipificado:If CosteTotal> DataSet1.Cliente(10).CreditoDisponible then

El ejemplo es exactamente igual al anterior, pero en este caso, el cdigo se centra ms en los objetos reales que en el objeto del lenguaje en s: las palabras Table y column ya no aparecen. En su lugar vemos que aparecen los nombres de los objetos empleados de la vida real, lo que hace el cdigo ms legible. Si a esto unimos que los entornos ya son capaces de ayudarnos a escribir el cdigo, todava lo tenemos ms sencillo, ya que podemos ver con nuestras palabras el modelo de objetos de datos que necesitamos en cada momento. Incluso a nivel de ejecucin nos vemos respaldado por un sistema de control de tipos y errores que nos permitirn proporcionar una robustez innata que antes no se tena sin pasar por el uso de funciones externas. P g i n a | 15

En el nuevo API de ADO.NET 2.0, incluso podremos mapear columnas, encapsular llamadas a procedimientos externos, conectar con mltiples orgenes de datos, etc. Rendimiento Puesto que trabajamos con objetos de datos desconectados, todo el proceso se acelera, ya que no tenemos que estar comunicndonos por Marshalling con el servidor. Adems, gracias al modelo de XML la conversin de tipos no es necesaria a nivel de COM. Se reduce pues el ancho de banda disponible, se independiza ms el cliente del servidor y se descarga ms a ste, que puede estar dedicado a otras tareas en lo que el cliente analiza sus datos. Ampliando las herramientas disponibles y conociendo una limitacin importante, en ADO.NET 2.0 se han extendido las funcionalidades de Serializacin. Me explico. En ADO.NET 1.1 el movimiento masivo de datos entre capas empleando DataSet puede producir cuellos de botella debido a la redundancia de los datos XML y su XSD de validacin. Existen contextos en el que esta redundancia plantea fuertes limitaciones: a) Almacenaje en dispositivos temporales (memoria compartida, disco duro) b) Sistemas de proceso RPC basados en remoting (No se requieren protocolos abiertos compatibles al 100%, sino ms bien las tecnologas de ejecucin RPC) Para esto, el modelo de serializacin de DataSet se extiende para soportar el formato binario. Un formato que permite compactar los datos y reducir el uso del esquema XSD al mnimo imprescindible. Se pierde en portabilidad pero se gana en optimizacin. Otra de las herramientas de mejora de rendimiento est en la incorporacin de nuevas funcionalidades asncronas, por las cuales todas aquellas tareas susceptibles de ser cuellos de botella, se pasan a segundo plano aadindolas todo un conjunto de seales (delegados, eventos, etc.) para su completo control con el mnimo esfuerzo. Escalabilidad Las aplicaciones Web tienen un nmero ilimitado de conexiones potenciales debido a la naturaleza de internet. Los servidores son capaces de atender muy bien decenas y decenas de conexiones. Pero cuando hablamos de miles y millones, los servidores ya no son capaces de realizar correctamente su trabajo. Esto es debido a que por cada usuario se mantiene una memoria de proceso y conexin, un conjunto de bloqueos de recursos como puedan ser tablas, ndices... y una comprobacin de sus permisos. Lo que lleva su tiempo y recursos. ADO.NET favorece la escalabilidad puesto que su modelo de conexin Off-Line evita que se mantengan los recursos reservados ms tiempo del considerado necesario. Y esto permite que ms usuarios por unidad de tiempo puedan acceder a la aplicacin sin problemas de tiempos. Adems se pueden montar servicios en Cluster de alta disponibilidad que sern balanceados automticamente por el sistema sin afectar a las conexiones ADO. Lo cual garantiza la ampliacin del servicio sin representar un cambio de arquitectura de diseo.

ADO.NET: Arquitectura de datos desconectadosADO.NET est basado en una arquitectura desconectada de los datos. En una aplicacin de datos se ha comprobado que mantener los recursos reservado mucho tiempo implica reducir el nmero de usuarios conectados y aumenta el proceso del sistema al mantener una poltica de bloqueos y transacciones. Al mismo tiempo, si la aplicacin mantiene ms de un objeto simultneamente, se encuentra con el problema de tener que estar continuamente conectando con el servidor para alimentar las relaciones existentes entre ambas, subiendo y bajando informacin va RPC.

P g i n a | 16

Con ADO.NET se consigue estar conectado al servidor slo estrictamente necesario para realizar la operacin de carga de los datos en el dataSet. De esta manera se reducen los bloqueos y las conexiones a la mnima expresin. Se pueden soportar muchos ms usuarios por unidad de tiempo y disminuyen los tiempos de respuesta, a la par que se aceleran las ejecuciones de los programas. Pero... qu ocurre con aquellas aplicaciones que DEBEN estar conectadas a la base de datos por su diseo y situacin de proceso? Por ejemplo, una aplicacin de alquiler de pelculas, o un sistema de venta de Stock... necesitan conocer en todo momento el estado de la base de datos. Y por ello requieren una conexin permanente con la BDD. Pues en ese caso, se continuar utilizando el modelo de objetos de ADO.NET conectado. Pero en el API de ADO.NET 2.0 se cubre mucho mejor el hueco que existe entre los dos modos de funcionamiento: el desconectado y el conectado. Gracias al nuevo modelo de Adaptadores y las funcionalidades de replicacin, es posible mantener sistemas semidesconectados que aprovechan lo mejor de los dos mundos, casi sin desarrollar cdigo.

Los Datos se almacenan en DataSets y tambin en DataTablesDe toda la vida, el recoger informacin de una base de datos ha ido destinado a realizar un proceso con dicha informacin: mostrarla por pantalla, procesarla o enviarla a algn componente. Frecuentemente, la aplicacin no necesita una nica fila, sino un buen conjunto de ellas. Adems, tambin frecuentemente, ese conjunto de filas procede no de una tabla sino de una unin de mltiples tablas (join de tablas). Una vez que estos datos son cargados, la aplicacin los trata como un bloque compacto. En un modelo desconectado, es inviable el tener que conectar con la base de datos cada vez que avanzamos un registro para recoger la informacin asociada a ese registro (condiciones del join). Para solucionarlo, lo que se realiza es almacenar temporalmente toda la informacin necesaria donde sea necesario y trabajar con ella. Esto es lo que representa un Dataset en el modelo ADO.NET. Un DataSet es una cach de registros recuperados de una base de datos que acta como un sistema de almacenamiento virtual, y que contiene una o ms tablas basadas en las tablas reales de la base de datos. Y que, adems, almacena las relaciones y reglas de integridad existentes entre ellas para garantizar la estabilidad e integridad de la informacin de la base de datos. Muy importante es recalcar, que los Datasets son almacenes pasivos de datos, esto es, que no se ven alterados ante cambios subyacentes de la base de datos. Es necesario recargarlos (FillDataSet) siempre que queramos estar al da en cuanto a datos se refiere.

Figura 1. Envo de Datasets entre componentes

Una de las mayores ventajas de esta implementacin, es que una vez recogido el dataset, ste puede ser enviado en forma de flujo XML- entre distintos componentes de la capa de negocio como si de una variable ms se tratase, ahorrando as comunicaciones a travs de la base de datos. Pero la clase DataSet es una clase que potencialmente puede consumir muchos recursos. En su modelo de clases y como toda buena base de datos- es posible subdividir su complejidad en clases ms pequeas. Es por esto que al igual que una base de datos se compone de tablas, un Dataset se componga de DataTables. Pero la novedad no est ah, sino en proporcionar nuevas funcionalidades que perP g i n a | 17

miten evolucionar DataTable y colocarlo al mismo nivel funcional que DataSet. Esto es, que DataTable se puede serializar y puede ser utilizado de forma autnoma, sin requerir el uso completo de la clase Dataset contenedora. Eso si, siguen siendo partes constitutivas, lo cual quiere decir que siguen conviviendo juntos como hasta ahora pero con la salvedad de que ahora DataTable es mayor y es capaz de vivir por su cuenta cuando sea menester.

Los DataSets/DataTables son independientes de los orgenes de datosUna consecuencia lgica de este tipo de arquitecturas, es la de conseguir que los objetos desconectados sean independientes de los orgenes de datos. Los drivers OLE-DB, los proveedores .NET, etc. transformarn la consulta SQL en un Cursor representado con una estructura XML, que es independiente del motor de la base de datos. Es ms, si encima encapsulamos toda la capa de datos en cmodos procedimientos almacenados, ni siquiera necesitaremos integrar el cdigo SQL en la capa de negocio, lo cual todava independiza ms el DataSet/DataTable de la base de datos (ya que el cdigo SQL, actualmente no es tan estndar...). Esto nos permitir trabajar con mltiples orgenes de datos, de distintos fabricante e incluso no-base de datos - como por ejemplo ficheros planos u hojas de clculo -... lo que representa un importante punto de compatibilidad y flexibilidad. Si a esto unimos que disponemos de un modelo consistente de objetos (xmlDOM) que es independiente del origen de datos, las operaciones -y toda su potencia- de los Datasets/Datatables no se vern afectadas por dicho origen.

Los Datos persisten en forma de documento XMLLa persistencia es un concepto muy interesante en el mundo del desarrollo. Es un mecanismo por el cual un componente puede almacenar su estado (valores de variables, propiedades, datos...en un momento concreto del tiempo) en un soporte de almacenamiento fijo. De manera, que cuando es necesario, se puede recargar el componente tal y como qued en una operacin anterior. En un sistema de trabajo Off-Line como el que plantea ADO.NET, la persistencia es un mecanismo fundamental. Podemos cerrar la aplicacin y mantener persistentes todos los DataSets necesarios, de manera que al reiniciarla, nos encontramos los DataSets tal y como los dejamos. Ahorrando el tiempo que hubiera sido necesario para recuperar de nuevo toda esa informacin del servidor. Optimizando todava ms el rendimiento del sistema distribuido. El formato que emplea ADO.NET para almacenar su estado es XML. Puesto que ya es un estndar de la industria, esta persistencia nos ofrece: La informacin podra estar accesible para cualquier componente del sistema que entienda XML. Es un formato de texto plano, no binario. Que lo hace compatible con cualquier componente de cualquier plataforma y recuperable en cualquier caso

P g i n a | 18

Los Esquemas: Metadatos de los documentos XMLMuchas veces necesitamos conocer el cmo se estructura un Dataset para poder averiguar qu columnas tenemos disponibles, con qu tipo de datos, tamao, etc. A esta informacin que define el cmo se estructura la informacin de le denomina Metadatos(Datos que definen datos). En el caso de los documentos XML, el que determina la estructura que stos tienen son los Esquemas. No son necesarios para la codificacin del documento XML, pero refuerzan su estructura a la par que establece una manera comn de introducir nuevos datos respetando un juego de reglas bsico, que toda aplicacin debe respetar si quiere mantener intacta la integridad del documento original. En ADO.NET la generacin de los esquemas as como de los documentos XML asociados a una base de datos son automticos y transparentes al usuario. No se necesitar acceder a ellos a bajo nivel, a menos que sea requisito del diseo. Dichos esquemas se actualizarn cuando se modifique la base de datos o las consultas empleadas para acceder a los datos. Lo dicho, todo transparente al usuario. Y proporcionarn toda la informacin necesaria para leer la estructura del dataset (que corresponder con la estructura fsica de la base de datos). Todo un invento. Si la tabla de SQL Server, es del estilo:

Figura 2. Tabla de Usuario en SQL Server

El esquema generado por el DataSet, quedara de la siguiente manera:

Figura 3. Esquema XML de la tabla Usuarios

P g i n a | 19

Aunque parezca un poco galimatas, se puede observar que en documento XML se pueden observar las caractersticas de la tabla sin necesidad de contar con el Enterprise Manager: Las estructuras element que definen la tabla y los campos de la tabla, las estructuras key que definen claves primarias y las estructuras complexType que permiten agrupar tipos simples en estructuras de ms alto nivel.

Componentes de ADO.NETVeamos una ilustracin del modelo de componentes que plantea Microsoft en su arquitectura .NET (imagen obtenida de la MSDN de Microsoft):

Figura 4. Modelo de Componentes de ADO.NET

Como parte de los componentes presentados en el grfico de la plataforma de datos de ADO.NET, tendremos:Componente Dataset DataTable Dataset command Descripcin Modelo jerrquico de representacin de una base de datos con arquitectura desconectada. Representa la estructura de una tabla: coleccin de columnas y filas. Conjunto de procedimientos ADO.NET de ejecucin de comandos SQL.

P g i n a | 20

Tabla 1

Como se puede observar, los datos son recogidos del servidor por los componentes DataSetCommand mediante la ejecucin de comandos SQL (procedimientos almacenados, vistas, consultas...) en el componente de negocio por los objetos DataSets. Empleando la interfaz XML, estos componentes entregan la informacin al nivel de interfaz de usuario, que a travs de entornos WEB, formularios estndar de Windows o bien herramientas especializadas pueden ya procesar y analizar la informacin. Y a modo de ejemplo, en la capa de interfaz de usuario:

ComponenteWebForms2 WinForms3 BizzTalk4

DescripcinInterfaz de usuario basada en componentes DHTML visualizables en un navegador. Interfaz de usuario basada en componentes GUI del entorno de Windows, a travs de programas ejecutables. Conjunto de herramientas cliente- servidor que permiten automatizar los procesos de negocio.Tabla 2

En los siguientes temas, se proceder a la documentacin de las distintas clases .Net dedicadas a las tareas de recuperacin de los datos y que estn recogidas en las libreras:

Nombre de la claseSystem.Data System.Data.Common

DescripcinEspacio de nombres que integra la gran mayora de clases que habilitan el acceso a los datos de la arquitectura .NET Contiene las clases compartidas para los .NET Providers5 (proveedores .NET). Proporcionan la coleccin de clases necesarias para acceder a una fuente de datos (como por ejemplo una Base de Datos). Espacio de nombres que permite el acceso a proveedores SQL Server en su versin 7.0 y superior. Este espacio de nombres ha sido ampliado para soportar las nuevas caractersticas de SQL Server 2005. Espacio de nombres con multitud de herramientas para interactuar con el nuevo motor de SQL Server 2005: enumeracin de servidores, gestin del servidor, implementacin de objetos de la BDD, etc. Slo para SQL Server 2005. Espacio de nombres que permite acceder a proveedores .NET que trabajan directamente contra controladores basados en los ActiveX de Microsoft Espacio de nombres que contiene las clases que actan de pasarela con el modelo de drivers ODBC de Windows. Emplean InterOp para acceder a los drivers nativos ODBC, pero proporcionan un marco de compatibilidad hacia atrs muy importante para muchos fabricantes de SW. Espacio de nombres, desarrollado por Microsoft, que posibilita el acceso a recur-

System.Data.SqlClient

System.Data.Sql

System.Data.OleDB System.Data.Odbc

System.Data.Oracle2

WebForms y Winforms se analizan en el texto de EIDOS dedicado al frameWork de desarrollo de Visual Studio .NET3

ver (1) Para ms informacin acerca de BizzTalk Server, vea la pgina de Microsoft http://www.microsoft.com/biztalk ver el punto siguiente los proveedores gestionados de datos.

4

5

P g i n a | 21

sos de sistemas gestores de Oracle. Dependen del cliente nativo de Oracle instalado en la mquina. Es recomendable que accedis a la web del fabricante para acceder a versiones ms actualizadas y desarrolladas por el propio fabricante. System.Data.Internal Integra el conjunto de clases internas de las que se componen los proveedores de datos. Proporciona la encapsulacin en clases de todos los tipos de datos nativos de SQL Server y sus funciones de manejo de errores, ajuste y conversin de tipos, etc.Tabla 3

System.Data.SqlTypes

Arquitectura orientada a conexinLa otra aproximacin posible a la resolucin de contextos de datos es la de vivir conectados a los mismos. Una aplicacin de estar conectada con el sistema gestor para acceder en tiempo real a los datos que almacena. En ADO.NET 2.0 este modelo no ha cambiado mucho respecto a la versin anterior. Es que el que menos ha cambiado, si bien si incorpora mejoras en la funcionalidad que eran necesarias. Repasemos algunos conceptos e introduzcamos las novedades

Los proveedores gestionados de datos. Los .Net ProvidersLos proveedores gestionados Managed Providers o .NET Providers- de datos hacen referencia a los mecanismos por los cuales un programa puede acceder a los recursos de un servidor de bases de datos. Son el conjunto de componentes que interactan como mediadores para independizar el programa de la base de datos. En trminos ya conocidos, son el equivalente a la arquitectura OLE-DB de Microsoft. Un conjunto de componentes que encapsulan el acceso, manejo de cursores y comunicaciones a un servidor de datos. En el caso de ADO.NET los proveedores gestionados estn encapsulados en un conjunto de clases que, precisamente, hacen transparente al programador el acceso a los recursos de los drivers de acceso a un servidor de datos. Son el modelo de clases del API de programacin de un origen de datos. De ah que en la tabla anterior nos encontremos con clases especficas de algunos fabricantes como es el case de System.Data.SqlClient, que encapsula toda la potencia y flexibilidad de la API de SQL Server. De esta manera el acceso a los datos es ms directo y no se requiere de multitud de componentes intermedios para realizar una accin, ni perder funciones especficas por compatibilidad con otras plataformas. En la plataforma .NET se ofrecen con el SDK, los proveedores gestionados: SQL Managed Provider. Ofrece el conjunto de clases necesarias para comunicarse con los comandos de SQL Server en su versin 7.0 superior. Especial hincapi en que este espacio de nombres ha sido evolucionado para soportar las nuevas tecnologas de SQL Server 2005, que no son pocas. Lo que se conoce se mantiene, pero investigar las novedades que son extremadamente potentes. OleDB Managed Provider. Ofrece el conjunto de clases necesarias para acceder fuentes de datos accesible a travs de drivers OLEDB/ODBC. En las mejoras de ADO.NET 2.0 el haber ampliado el soporte que el CLR da a estos tipos de proveedores, como por ejemplo la integracin mejorada de la seguridad, el pool de conexiones, etc. ODBC Managed provider. Conexiones con el modelo de drivers de la pasarela ODBC nativa de Windows. No se garantiza en todos los casos el mismo soporte por parte del CLR, pero se P g i n a | 22

ha extendido la funcionalidad para soportar ms y mejores caractersticas de los ms potentes y recientes. ORACLE Managed Provider. Portado de la versin ADO.NET 1.1. Extendido para garantizar la compatibilidad con el cliente de Oracle en su versin 9. Si necesitis soporte para versiones superiores, ser bueno ir a la web de la propia Oracle o emplear sus homlogos ODBC/OLEDB.

La arquitectura de los .NET ProviderToda clase que aspire a .NET Provider, debe cumplir que en su espacio de nombres implemente las clases derivadas de: Connection. Que ser la clase encargada de encapsular toda la funcionalidad de conexin a las fuentes de datos. Command. Que ser la que encapsula el envo de comandos SQL al servidor. DataReader. Que contiene todo el subsistema de lectura de los cursores resultados de una Query DataAdapter. Que es el componente encargado de adaptar el conjunto de operaciones realizadas desde un origen genrico (por ejemplo, un dataSet) hacia un destino (un servidor de bases de datos relacionales concreto, por ejemplo SQL Server) y viceversa.

Figura 5. Modelo de clases de ADO.NET

Como ejemplo, el espacio de nombres System.Data,.SqlClient implementa las clases: SqlConnection SqlCommand SqlDataReader SqlDataAdapter

P g i n a | 23

Adems, los .NET Providers tienen la capacidad de enviar/recibir y almacenar persistentemente de manera off-line todo el flujo de informacin en formato XML. Suelen implementar los mtodos ReadXML y WriteXML para poder implementar esta funcionalidad. Actualmente estn en fase final los proveedores gestionados de SQL Server (SQL Managed Providers) y los de para el acceso a todo el soporte de datos fabricado sobre las especificaciones de OLE-DB, Microsoft proporciona el conjunto de clases de ADO.NET que tiene compatibilidad con los proveedores de datos OLE-DB (ADO Managed Providers):

Nombre del proveedor OLEDBSQLOLEDB MSDAORA JOLT MSDASQL/SQLServer ODBC MSDASQL/Jet ODBC

Descripcin del proveedorProveedor SQL Server OLEDB Proveedor ORACLE OLEDB JET OLEDB Provider (proveedor de bases de datos JET) Acceso va Direct-ODBC a sistemas SQL Server (conexiones ODBC a travs de drivers OLEDB) Acceso va Direct-ODBC a sistemas JET (conexiones ODBC a travs de drivers OLEDB)Tabla 4

En la actualidad el soporte de terceros a la plataforma .NET ha crecido hasta prcticamente ofrecer proveedores para todo sistema gestor que se puede encontrar en el mercado: DB2, MySQL, Informix, etc. Para ms informacin, visitad las web de los respectivos fabricantes. Bien, despus de haber introducido los conceptos bsicos de la plataforma .NET orientada a los datos de la nueva arquitectura de Microsoft, pasamos ya a describir con todo detalle la nueva propuesta de Microsoft para el acceso a los datos.

Una nueva aproximacin: Factoras de conexionesEn ADO.NET 2.0 se ha evolucionado el modelo de los proveedores de tal forma que no slo contemos con conexiones con proveedores concretos conocidos de antemano, sino que adems podamos en tiempo de ejecucin elegir el proveedor que necesitamos. Esto facilita la generacin de arquitecturas de SW o productos DataProvider agnostics es decir, independientes del proveedor. No es que no fuera posible en versiones anteriores, pero las herramientas que se proporcionaban no iban encaminadas a estos menesteres. Casi se sugera que era responsabilidad del programador el crear un modelo de servicio para hacer el cdigo ms abstracto, no haciendo fcil la cara dinmica de clases como si era factible hacer en los modelos de los antiguos OLEDB a travs de la cadena de conexin. El caso, es que todo apuntaba a poder implementar un modelo independiente del proveedor, pero al final la complejidad de anlisis y su puesta en produccin apostaba a por modelos ms sencillos, en los que era el propio desarrollador el que se montaba la capa de servicios de datos y la reemplazaba en el caso de cambiar de sistema gestor. Pero en la versin 2.0 de ADO.NET se ha escuchado a todos los desarrolladores que demandaban esta funcionalidad. Y se ha implementado de una forma muy elegante, siendo una opcin ms en el SDK que no estorba, pero que se puede utilizar para mejorar el cdigo o abordar estos contextos, sin modificar todo lo ya conocido. A travs de los principios de abstraccin y la carga dinmica de clases, podremos generar cdigo independiente del sistema gestor. Pero ya lo veremos en su momento.

P g i n a | 24

Un nuevo participante: SQL Server 2005Para acabar con esta somera introduccin a lo que trataremos en este texto, no poda dejar de lado al nuevo participante en las tecnologas corporativas: SQL Server 2005. Un nuevo producto de Microsoft que no ha sido slo un lavado de cara del ya soberano SQL Server 2000. Rediseado desde cero, se ha puesto al da con las nuevas tecnologas y ofrece ciento de novedades que harn nuestros aplicativos corporativos mucho ms productivos que nunca. No es plan dedicar este texto a SQL Server 2005, pues ya hay otros autores que estn con ello, pero no puedo evitar hablar del tema, ya que va de la mano de las mayores mejores de las clases de ADO.NET. En SQL Server 2005 podemos decir que existen tres grandes bloques que afectan a ADO.NET: a) Los nuevos API, frameworks y servicios de SQL Server 2005. Como, por ejemplo, Notification Services, Service Broker, etc. Que obviamente ofrecen multitud de herramientas para simplificar ciertos contextos corporativos a la mnima expresin. b) Las nuevas caractersticas del CORE de SQL Server 2005. Que hacen que el servidor ofrezca mejores herramientas, y un lenguaje TSQL ms potente y con ms funcionalidad que el anterior. A la par que .NET se embute en el propio CORE, dando al desarrollador la oportunidad de desarrollar objetos de datos empleando esta tecnologa: procedimientos almacenados, funciones incluso nuevos tipos de datos. c) Las nuevas caractersticas del servidor de administracin. Lo cual llevar a los desarrolladores a interactuar de un modo ms concreto con todo el motor de la base de datos, automatizando virtualmente cualquier tarea del sistema gestor. A la par que hay ms y mejores herramientas de tolerancia a fallos, alta disponibilidad, etc., que permitir el desarrollo de sistemas ms robustos que nunca, con la mnima interaccin por parte del desarrollador.

Figura 6. SQL Server Enterprise Manager y los interfaces de programacin de una BDD

P g i n a | 25

En el presente texto haremos mencin del apartado (b). Los dems, los dejaremos para el autor de SQL Server que tiene tambin muchas cosas que contar.

Nuevas herramientas de diseo de capas de datosUna de las mayores novedades de ADO.NET 2.0 est en el nuevo soporte que da para la construccin de capas de datos. Entendiendo por capa de datos la abstraccin lgica que montamos para independizar una capa lgica de aplicacin de capas de ms bajo nivel. Para esto, ADO.NET ofrece dos nuevos frameworks de encapsulacin de la capa de datos: a) Mejores controles vinculados a datos. Nuevos controles, evoluciones de los anteriores el caso es que hay un 20% de mejoras en las tecnologas de MS de DataBinding. Muchas ms propiedades que antes, que mejoran la productividad a niveles impresionantes. Baste decir que montar un formulario maestro/detalle nos lleva escasos 5 minutos, que cargar una combo a partir de una coleccin es una lnea de cdigo, etc. Y que el nuevo control DataBindingNavigator nos ofrece todas las herramientas de navegacin y manipulacin de datos sin picar prcticamente cdigo. b) Una arquitectura de acceso a datos basada en los esquemas de datos. Totalmente integrado con VS 2005, la posibilidad de generar una capa de acceso a datos totalmente encapsulada en clases, basada en la descripcin del modelo de datos a partir de esquemas XSD. A partir de dicho esquema XSD, se genera el cdigo necesario para dar al desarrollador todas las herramientas que demande para navegar y manipular los datos. Y poder cambiarlo en cualquier momento, simplemente accediendo al esquema y aadiendo o quitando funcionalidad. Y, como no, integrado con toda la tecnologa de DataBinding. Lo veremos, una maravilla. Que dejemos claro a muchos gustar a otros no. Pero aqu lo dejamos caer.

Los ejemplos del textoPara que no tengis que picaros todos los fuentes a mano, podris decargar todos los proyectos realizados en el texto en la siguiente URL: http://www.elcampusdigital.com/FtpTextos/AdoNet2/FuentesADONET2.zip En todos los captulos, debajo del cdigo fuente tendris especificada la carpeta del proyecto del que se est hablando en cada momento. Bien, pues despus de este pedazo de presentacin creo que es momento de entrar de lleno en el nuevo ADO.NET 2.0. Manos a la obra.

P g i n a | 26