acceso a datos con ado .net 4.0 (ejemplo)

Click here to load reader

Post on 02-Aug-2015

196 views

Category:

Documents

1 download

Embed Size (px)

TRANSCRIPT

Acceso a datos con ADO .NET 4.0Jos Luis Hevia y ngel Rayo

La coleccin. Saber hacer de los profesionales TIC se corresponde con textos escritos por el plantel de profesores de la prestigiosa compaa tecnolgica Alhambra Eidos. Esta firma, especializada en la formacin de personal tcnico en las tecnologas de la informacin y de las comunicaciones, lleva formando en Espaa desde hace veinte aos a multitud de profesionales en dicho entorno. Muchas de las obras contenidas en la serie son los textos que Alhambra Eidos emplea en su reconocido Mster Alhambra Eidos en desarrollo de software, un curso que la mencionada compaa ha decidido impartir usando el libro electrnico como base. As, sus alumnos, en lugar de recibir las ms de 3.000 pginas en papel que hasta el curso 2008-2009 reciba, ahora se les entrega un reader en propiedad que contiene esa misma informacin pero en formato de libro electrnico.

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-516 (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 4.0 como son LINQ y sus variantes LINQ to Objects, LINQ to DataSet, LINQ to DataSet, LINQ to SQL, Entity Framework y los ADO.NET Data Services.

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 en .NET 4.0, MCITP en SQL Server 2008 y MCTS en SharePoint 2010 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.

LuarnaAcceso a datos con ADO.NET 4.0 Jos Luis Hevia y ngel Rayo Alhambra-Eidos De esta edicin: 2010, Luarna Ediciones, S.L.

www.luarna.com

Madrid, diciembre de 2010 ISBN: 978-84-15013-01-3 Versin 1.0 (15-12-2010)

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 4.0Jos Luis Hevia y ngel Rayo

Indice1.ADO.NET .................................................................................................................................................... 12 INTRODUCCIN .............................................................................................................................................. 12 ADO.NET 1.1 VERSUS ADO.NET 4.0. MADUREZ DE UNA ARQUITECTURA. ................................................................. 12 BENEFICIOS DE ADO.NET ................................................................................................................................ 15 ADO.NET: ARQUITECTURA DE DATOS DESCONECTADOS .......................................................................................... 17 Los Datos se almacenan en DataSets y tambin en DataTables............................................................ 17Los 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................................................................................. 25 UN NUEVO PARTICIPANTE : SQL SERVER 2008....................................................................................................... 25 NUEVAS HERRAMIENTAS DE DISEO DE CAPAS DE DATOS .......................................................................................... 26 LOS EJEMPLOS DEL TEXTO ................................................................................................................................. 26 2.LA EXPERIENCIA ADQUIRIDA DE ADO.NET.................................................................................................. 28 ARQUITECTURAS DE APLICACIONES...................................................................................................................... 28 Diferentes almacenamientos de los datos .............................................................................................. 29 Determinacin del modo de recuperacin de los datos ........................................................................... 29 Modelos de diseo de aplicaciones distribuidas...................................................................................... 30 Buenas prcticas ................................................................................................................................. 32 ADO.NET ................................................................................................................................................... 33 DataSet ................................................................................................................................................. 35 Las clases conectadas a datos ............................................................................................................... 36 Optimizacin de los recursos: patrones asncronos ................................................................................. 37 Transacciones distribuidas: una realidad ................................................................................................ 38 ADO.NET Y XML .......................................................................................................................................... 39 LAS CLASES DE ADO.NET ................................................................................................................................ 40 NameSpaces.......................................................................................................................................... 40 Clases Desconectadas de datos .............................................................................................................. 40 Clases especficas de un proveedor de datos (Conectadas a Datos) ......................................................... 41 3.CONEXIONES A DATOS ............................................................................................................................... 42 LAS CONEXIONES A DATOS ................................................................................................................................ 42 .NET DATA PROVIDERS ................................................................................................................................... 43 Repasando lo existente: DAO y ODBC, ADO y OLEDB .............................................................................. 43 Proveedores de datos .NET .................................................................................................................... 45 DEFINIENDO CONEXIONES ................................................................................................................................. 47 Cadenas de conexin ............................................................................................................................. 47 El buen hacer con los lenguajes ........................................................................................................... 51 Algunos usos importantes de los objetos de conexin .......................................................................... 51

5

Ejemplos de cadenas de conexiones ....................................................................................................... 52 Un ejemplo completo de conexin ....................................................................................................... 53 Seguridad en el acceso a los datos ......................................................................................................... 55 PROCESO DE EVENTOS DE CONEXIN ................................................................................................................... 57 Captura del evento StateChange ............................................................................................................ 57 Deteccin de mensajes de Error / Informacin ....................................................................................... 62 Manejadores de excepciones estructurados ........................................................................................... 67 El balanceo de conexiones ..................................................................................................................... 70 Lo que haba hasta ahora.................................................................................................................... 70 El Pool de conexiones. ADO.NET Forever! ............................................................................................... 72 Los parmetros de control del Pool de conexiones en la cadena de conexin .......................................... 73 Utilizar el Analizador de SQL Server... ..................................................................................................... 75 Otra demo, con el analizador de SQL 2008 ............................................................................................. 77 ENUMERACIN DE SERVIDORES SQL SERVER ......................................................................................................... 78 GENERACIN DE CADENAS DE CONEXIN .............................................................................................................. 80 4.OPERACIONES CONECTADAS A DATOS ....................................................................................................... 83 OPERACIONES CONECTADAS A DATOS .................................................................................................................. 83 EJECUTAR COMANDOS: XXXCOMMAND ............................................................................................................... 83 La creacin de un objeto XxxCommand .................................................................................................. 84 Las diferentes maneras de hacer las cosas. Tipos de comandos. ............................................................. 85 Ejecucin de comandos y obtencin de respuestas ................................................................................. 87ExecuteReader y los lectores de datos (DataReader)........................................................................................... 87 Mltiples resultados...................................................................................................................................... 92 MARS (Multiple Active Result Set) ................................................................................................................. 94 ExecuteScalar. Recuperacin de valores simples.............................................................................................. 97 DML de actualizacin, DCL y DDL........................................................................................................................ 98 InfoMessage...................................................................................................................................................... 62

LOS PARMETROS EN SQL .............................................................................................................................. 100 Asignacin de parmetros ................................................................................................................... 101 Tipos de parmetros: Entrada, Salida, Valor de retorno... ..................................................................... 104 No slo de procedimientos vive el hombre............................................................................................ 107 OPERACIONES ASNCRONAS ............................................................................................................................ 108 El API asncrono de ADO.NET 4.0.......................................................................................................... 109 El algoritmo asncrono ......................................................................................................................... 110 NUEVOS COMANDOS DE SQLCLIENT .................................................................................................................. 115 SqlBulkCopy......................................................................................................................................... 116 SqlDependency .................................................................................................................................... 118 CONSIDERACIONES FINALES ............................................................................................................................. 122 5.API INDEPENDIENTE DEL FABRICANTE...................................................................................................... 123 INTRODUCCIN ............................................................................................................................................ 123 LAS FACTORAS DE CLASES ............................................................................................................................... 124 FACTORAS DE CLASES DE ADO.NET ................................................................................................................. 124 El proceso de conexin......................................................................................................................... 125Enumeracin de los proveedores instalados ..................................................................................................... 125 Especificar el proveedor en tiempo de ejecucin .............................................................................................. 127 Conexiones Parametrizadas ............................................................................................................................. 128

6

Operaciones conectadas independientes del proveedor........................................................................ 131 6.OPERACIONES DESCONECTADAS DE LOS DATOS ...................................................................................... 135 OPERACIONES DESCONECTADAS ....................................................................................................................... 135 Evolucin en ADO.NET 4.0.................................................................................................................... 136 ARQUITECTURA DE DATASET ........................................................................................................................... 137 INDEPENDENCIA DEL ORIGEN ........................................................................................................................... 138 CONSTRUYENDO DATASET .............................................................................................................................. 139 Creando la base de datos: DataSet, DataTable y DataColumn ........................................................... 140 Expresiones en las columnas: Campos Calculados ................................................................................ 144 Constraints y las propiedades de las columnas ..................................................................................... 145Claves primarias (PrimaryKey Constraints)........................................................................................................ 146 Claves ajenas (ForeignKey Constraints)............................................................................................................. 147

Relaciones entre tablas: DataRelation .................................................................................................. 148 EL PROCESO DE LOS DATOS ............................................................................................................................. 151 Consultas de tablas.............................................................................................................................. 151 Consultas a vistas ................................................................................................................................ 153 Inserciones, modificaciones y borrados ................................................................................................ 156Insertar nuevos datos ...................................................................................................................................... 156 Modificar datos ............................................................................................................................................... 157 Borrar Datos .................................................................................................................................................... 158

Los eventos de las tablas...................................................................................................................... 159 El control de versiones ......................................................................................................................... 160 XML. PERSISTENCIA ESTNDAR EN ADO.NET..................................................................................................... 162 DataSet ............................................................................................................................................... 164 DataTable ........................................................................................................................................... 168 Lecturas de datos conectadas a DataTable ....................................................................................... 172 FINALIZANDO ESTE TEMA ............................................................................................................................. 173 7.DATASET Y LAS FUENTES DE DATOS ......................................................................................................... 174 UNA FILOSOFA INDEPENDIENTE DEL FABRICANTE .................................................................................................. 174 ANSI SQL92. Primera solucin a un problema... ................................................................................... 174 ODBC, OLEDB, Conexiones, RPC............................................................................................................ 175 Ver la luz... con XML. ........................................................................................................................... 175 CARGA DESDE UN .NET DATA PROVIDER............................................................................................................ 177 Carga de un DataSet a partir de consultas no XML. .............................................................................. 179 Carga de datos a partir de consultas XML ............................................................................................ 182 Actualizacin de datos. Sincronizacin. ................................................................................................ 186El Diffgram ...................................................................................................................................................... 188 Uso de GetChanges() ....................................................................................................................................... 190 Merge( ) .......................................................................................................................................................... 191 El mtodo Select( )........................................................................................................................................... 191 A vueltas con los conflictos de sincronizacin ................................................................................................... 191

DbCommandbuilder............................................................................................................................. 193Actualizaciones en BATCH en ADO.NET 4.0....................................................................................................... 195 Un ejemplo que lo resume ............................................................................................................................ 195

CARGA DE DATOS DESDE XML ......................................................................................................................... 199 Visual Studio .NET y XML ..................................................................................................................... 203

7

De esquema a XML .......................................................................................................................................... 203 De XML a esquema .......................................................................................................................................... 207

CARGA DESDE FLUJOS DE DATOS -STREAMS- ........................................................................................................ 209 DATASET Y ORGENES HETEROGNEOS ............................................................................................................... 212 8.TRANSACCIONES CON ADO.NET ............................................................................................................... 215 LAS OPERACIONES PROTEGIDAS: TRANSACCIONES ................................................................................................. 215 LAS TRANSACCIONES AL DETALLE ...................................................................................................................... 216 La clase XxxTransaction ....................................................................................................................... 218 Los niveles de aislamiento.................................................................................................................... 219 Transacciones desde el lenguaje SQL.................................................................................................... 223 Subniveles transaccionales (slo para SQL Server!) ............................................................................... 224 Procedimientos Almacenados .............................................................................................................. 225 Normas ACID ....................................................................................................................................... 226 EL NUEVO API TRANSACCIONAL DE ADO.NET 4.0 ............................................................................................... 227 Novedades del API System.Transactions............................................................................................... 227 Para utilizar el nuevo API, se requiere un ensamblado ....................................................................... 228 Transacciones explcitas....................................................................................................................... 229 Transacciones implcitas ...................................................................................................................... 232 Transacciones distribuidas ................................................................................................................... 233 EnterpriseServices................................................................................................................................ 233 9.DATASET Y LOS SERVICIOS WEB ............................................................................................................... 235 DE UNA ARQUITECTURA DISTRIBUIDA A LA ARQUITECTURA DISTRIBUIDA ............................................................... 235 LOS SERVICIOS WEB ....................................................................................................................................... 237 DATOS EN SERVICIOS WEB .............................................................................................................................. 238 Consumo de un Servicio Web Estndar................................................................................................. 238Creacin del servicio web................................................................................................................................. 239 Creacin del cliente web .................................................................................................................................. 243

CONSUMO DE SERVICIOS WEB NO ESTNDAR ....................................................................................................... 245 LA EVOLUCIN DE LA BESTIA: SQL SERVER WEB SERVICES ...................................................................................... 246 10.VISUAL STUDIO Y LOS SERVICIOS DE DATOS (I)....................................................................................... 251 UN IDE COMPLETAMENTE RENOVADO ............................................................................................................... 251 DISEANDO LA CAPA DE DATOS: DATA DESIGNER ................................................................................................. 253 Orgenes de datos. Comenzando con planificacin............................................................................. 255 Data Source Explorer ........................................................................................................................... 256 El Diseador de datos (Data Designer) ................................................................................................. 260 TableAdapter Configuration Wizard ..................................................................................................... 262 La infraestructura de la arquitectura.................................................................................................... 267 Agregar nuevos orgenes a un componente ya configurado .................................................................. 268 Establecer relaciones en la lgica de datos ........................................................................................... 269 OTRAS HERRAMIENTAS DEL ENTORNO ................................................................................................................ 271 11.VISUAL STUDIO 2010 Y LOS SERVICIOS DE DATOS (II): WINFORMS......................................................... 273 VNCULO A DATOS DESDE WINFORMS ............................................................................................................... 273 PREPARAR EL ENTORNO DE LA DEMO ................................................................................................................. 274 VINCULAR CONTROLES A DATOS SIN ESFUERZO. FORMULARIOS SENCILLOS. ............................................................... 275 Modificar el diseo del formulario........................................................................................................ 276Ampliando la funcionalidad de un adaptador ................................................................................................... 266

8

FORMULARIOS MAESTRO-DETALLE ................................................................................................................... 277 VINCULACIN AVANZADA DE DATOS EN WINDOWS ............................................................................................... 281 Parmetros en consultas de datos ....................................................................................................... 282 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 12.VISUAL STUDIO 2010 Y LOS SERVICIOS DE DATOS (III): ASP.NET ............................................................. 293 VNCULO A DATOS DESDE ASP.NET .................................................................................................................. 293 EL ENTORNO DE ASP.NET.............................................................................................................................. 294 FORMULARIOS SENCILLOS ENLAZADOS A DATOS .................................................................................................... 295 FORMULARIOS BASADOS EN PARMETROS .......................................................................................................... 296 FORMULARIO MAESTRO-DETALLE ..................................................................................................................... 297 OTROS CONTROLES DE DATOS, CON MS OPCIONES ............................................................................................... 300 UN CASO PARTICULAR ................................................................................................................................. 301 Y PARA TERMINAR... ..................................................................................................................................... 302 13.FUNDAMENTOS DE LINQ ........................................................................................................................ 304 CONSULTAS EN LINQ .................................................................................................................................... 304 Operaciones bsicas de consulta en LINQ............................................................................................. 308Obtencin de un origen de datos ..................................................................................................................... 308 Filtrado de datos.............................................................................................................................................. 308 Ordenacin de los resultados ........................................................................................................................... 309 Agrupacin ...................................................................................................................................................... 310 Unin .............................................................................................................................................................. 311 Seleccin de datos ........................................................................................................................................... 311

OPERADORES DE CONSULTA ESTNDAR .............................................................................................................. 312 Modo de ejecucin de los operadores de consulta estndar ................................................................. 314Modo de ejecucin inmediata (Immediate) ...................................................................................................... 314 Modo de ejecucin aplazada (Deferred) ........................................................................................................... 314

PROFUNDIZACIN EN LOS OPERADORES DE CONSULTA ........................................................................................... 315 Operaciones de proyeccin .................................................................................................................. 317 Operaciones de filtrado ....................................................................................................................... 322 Operaciones de ordenacin.................................................................................................................. 323 Operaciones de agrupacin ................................................................................................................. 325 Operaciones de manejo de conjuntos (Set) ........................................................................................... 327 Operaciones cuantificadoras................................................................................................................ 329 Operaciones de particionado de datos ................................................................................................. 331 Operaciones de combinacin ............................................................................................................... 332 Operaciones de generacin .................................................................................................................. 334 Operaciones de igualdad ..................................................................................................................... 335 Operaciones de elementos ................................................................................................................... 336 Operaciones de conversin de tipos de datos ....................................................................................... 338 Operaciones de concatenacin............................................................................................................. 340 14.LINQ TO XML .......................................................................................................................................... 343 DIFERENCIAS ENTRE TECNOLOGAS XML ............................................................................................................ 343

9

LINQ to XML vs DOM ........................................................................................................................... 343 LINQ to XML vs XmlReader................................................................................................................... 346 LINQ to XML vs XSLT ............................................................................................................................ 346 LINQ to XML vs MSXML........................................................................................................................ 346 LINQ to XML vs XmlLite ........................................................................................................................ 347 CLASES DE LINQ TO XML .............................................................................................................................. 347 La clase XDocument............................................................................................................................. 348 Ejemplos de uso de los mtodos y propiedades de la clase XDocument ................................................ 350 La clase XElement ................................................................................................................................ 352 La clase XAttribute............................................................................................................................... 355 CONSULTAS DE RBOLES XML CON LINQ TO XML ............................................................................................... 357 Bsqueda de elementos ....................................................................................................................... 357 SEGURIDAD EN LINQ TO XML......................................................................................................................... 358 HERRAMIENTAS ASOCIADAS CON LINQ TO XML .................................................................................................. 358 15.LINQ TO DATASET................................................................................................................................... 361 VISIN GENERAL DE LINQ TO DATASET ............................................................................................................. 361 CLASES DE LINQ TO DATASET ......................................................................................................................... 362 DataTableExtensions y DataRowExtensions ......................................................................................... 362 EnumerableRowCollectionExtensions ................................................................................................... 363 EnumerableRowCollection ....................................................................................................... 364 OrderedEnumerableRowCollection....................................................................................................... 365 TypedTableBase ............................................................................................................................. 365 CONSULTAS CONTRA DATASET......................................................................................................................... 365 Consultas contra un DataSet no tipado ................................................................................................ 366 Consulta contra un DataSet tipado ...................................................................................................... 367 Uso del mtodo CopyToDataTable ....................................................................................................... 367 Modificacin del valor de un campo de una tabla................................................................................. 368 16.LINQ TO SQL ........................................................................................................................................... 369 CREACIN DE LA ESTRUCTURA DE DATOS ............................................................................................................ 370 Creacin de las entidades .................................................................................................................... 370 Creacin de las columnas de las entidades ........................................................................................... 375 Creacin de asociaciones ..................................................................................................................... 376Clase AssociationAttribute ............................................................................................................................... 379 Clase EntitySet ................................................................................................................................................. 380

Creacin de la estructura de datos con Visual Studio 2008 ................................................................... 381 Clase DataContext ............................................................................................................................... 383 USO DEL ORIGEN DE DATOS LINQ EN NUESTRAS APLICACIONES ................................................................................ 393 17.ADO.NET ENTITY FRAMEWORK .............................................................................................................. 398 ENTITY DATA MODEL .................................................................................................................................... 399 Clase ObjectContext............................................................................................................................. 407 SERVICIOS DE OBJETOS .................................................................................................................................. 410 LINQ TO ENTITIES ........................................................................................................................................ 410 LENGUAJE ENTITY SQL .................................................................................................................................. 413 18.LA EXPERIENCIA ADQUIRIDA DE ADO.NET.............................................................................................. 416 CLAVES AJENAS EN EL MODELO CONCEPTUAL ...................................................................................................... 416 NUEVOS MTODOS PARA EL DESARROLLO DE APLICACIONES N-CAPAS ........................................................................ 417

10

SOPORTE ENTITYDATASOURCE PARA EL CONTROL QUERYEXTENDER .......................................................................... 417 EJECUCIN DIRECTA DE COMANDOS ALMACENADOS .............................................................................................. 418 ExecuteStoreCommand........................................................................................................................ 418 ExecuteStoreQuery .............................................................................................................................. 419 Translate ............................................................................................................................................. 421 OBJETOS QUE IGNORAN LA PERSISTENCIA ............................................................................................................ 421 CARGA PEREZOSA (LAZY) DE OBJETOS RELACIONADOS ............................................................................................ 423 FUNCIONES EN LAS CONSULTAS LINQ A ENTIDADES .............................................................................................. 423 EntityFunctions .................................................................................................................................... 424Funciones personalizadas de base de datos ...................................................................................................... 424 Funciones personalizadas del modelo .............................................................................................................. 425

SqlFunctions ........................................................................................................................................ 426 MEJORAS EN ORDERBY EN LINQ A ENTIDADES .................................................................................................... 427 GENERACIN DE CDIGO PERSONALIZADO DE LA CAPA DE OBJETOS ........................................................................... 427 SOPORTE MODEL-FIRST ................................................................................................................................. 427 SOPORTE DE TIPOS COMPLEJOS ........................................................................................................................ 428 19.ADO.NET DATA SERVICES ....................................................................................................................... 431 VISIN GENERAL .......................................................................................................................................... 431 IMPLEMENTACIN DE NUESTRA BASE DE DATOS.................................................................................................... 431 Paso 1: Creacin del modelo entity framework..................................................................................... 431 PASO 2: creacin del servicio de datos.................................................................................................. 433 PASO 3: Acceso a los datos mediante REST........................................................................................... 435 PASO 4: Acceso a los datos mediante clases .NET ................................................................................. 437 20.INTRODUCCIN AL DESARROLLO CON SQL SERVER 2005: SQLCLRS........................................................ 439 LA EVOLUCIN DE LA BESTIA ............................................................................................................................ 439 PROCEDIMIENTOS ALMACENADOS ESTANDAR ...................................................................................................... 440 PROCEDIMIENTO ALMACENADO SENCILLO ........................................................................................................... 440 PROCEDIMIENTOS CON PARMETROS ................................................................................................................ 443 CONSULTAS DML ........................................................................................................................................ 444 SQLCONTEXT .............................................................................................................................................. 445 PROCEDIMIENTO DE CURSORES DINMICOS ......................................................................................................... 445 21.EL DISEO DE NUESTRA BDD ACME........................................................................................................ 448 EL DISEO DE ACME .................................................................................................................................... 448 22.INSTALAR ADVENTUREWORKS ............................................................................................................... 451 AJUSTAR SQL SERVER 2005 ........................................................................................................................... 451 AJUSTAR LAS HABILIDADES DE SQL SERVER 2005 ................................................................................................. 452

11

1.

ADO.NET

Introduccin.NET es una tecnologa ya ms que asentada. Durante casi 10 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 6 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 10 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 4.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 2010. 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 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 4.0 para abordar esas tareas. En el presente texto, hablaremos del modelo de clases de ADO.NET 4.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 4.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 4.0 ofrece numerosos cambios, unos como mejoras de la arquitecturas anteriores de ADO.NET 1.1 y ADO.NET 2.0, y otros como cambios radicales: LINQ, Entity Framework y ADO.NET Data Services. 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-. Si comparamos ambas arquitecturas, podremos sacar las siguientes conclusiones:

12

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 4.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 4.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 funciona, amplalo

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 4.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 4.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 el mismo cdigo en DataSet 4.0 tarda no llega al minuto. Ah queda eso.

Nuevas herramientas

Ms contextos de anlisis llevan al desarrollo de nuevas formas de abordarlos. Por lo tanto, en ADO.NET 4.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. de Acompaando al estreno de .NET 4.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

Nuevos tipos de datos

Factoras de proveedores y el API independiente del proveedor de datos. DataTable se independiza

Mejores proveedores datos: SQL Server 2008

13

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 4.0. Slo un tema entero para hablar de esto. Mejores proveedores datos: OLE DB de 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 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!

Rendimiento

Optimizacin

Nuevas herramientas de DataBinding

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

1

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

14

Beneficios de ADO.NETADO.NET 4.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 InteroperabilidadLas 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. 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 ms 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 4.0 y las herramientas de VS 2010, 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:

15

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. En el nuevo API de ADO.NET 4.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 4.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 16

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. 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 4.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.

17

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 permiten 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

18

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

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:

19

Figura 3. Esquema XML de la tabla Usuarios

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 Descripcin Modelo jerrquico de representacin de una

20

base de datos con arquitectura desconectada. DataTable DataSet command Representa la estructura de una tabla: coleccin de columnas y filas. Conjunto de procedimientos ADO.NET de ejecucin de comandos SQL.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:Componente WebForms2 WinForms3 Descripcin Interfaz 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

BizTalk4

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 clase de la Descripcin Espacio 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.

System.Data

System.Data.Common

System.Data.SqlClien t

2

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

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

21

Nombre clase

de

la

Descripcin 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 recursos 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. 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.Sql

System.Data.OleDB

System.Data.Odbc

System.Data.Oracle

System.Data.Internal 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 comunica-

22

ciones 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 2008, 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 4.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 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.

23

Figura 5. Modelo de clases de ADO.NET

Como ejemplo, el espacio de nombres System.Data,.SqlClient implementa las clases: SqlConnection SqlCommand SqlDataReader SqlDataAdapter 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 OLEDB SQLOLEDB MSDAORA JOLT MSDASQL/SQLServer ODBC MSDASQL/Jet ODBC Descripcin del proveedor Proveedor 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.

24

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.

Un nuevo participante: SQL Server 2008Para 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 2008. 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 2008, 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 2008 podemos decir que existen tres grandes bloques que afectan a ADO.NET: a) Los nuevos API, frameworks y servicios de SQL Server 2008. 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 2008. 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

25

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

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 ya incluidas en ADO.NET 2.0 y mantenida y mejorada en ADO.NET 4.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 2010, 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 textoEn todos los captulos, debajo del cdigo fuente tendris especificada la carpeta del proyecto del que se est hablando en cada momento.

26

Bien, pues despus de este pedazo de presentacin creo que es momento de entrar de lleno en el nuevo ADO.NET 4.0. Manos a la obra.