Acceso a Datos Con ADO .NET 4.0 (Ejemplo)

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

La coleccin. Saber hacer de los profesionales TIC se correspondecon textos escritos por el plantel de profesores de la prestigiosacompaa tecnolgica Alhambra Eidos. Esta firma, especializada en laformacin de personal tcnico en las tecnologas de la informacin y delas comunicaciones, lleva formando en Espaa desde hace veinte aos amultitud de profesionales en dicho entorno. Muchas de las obrascontenidas en la serie son los textos que Alhambra Eidos emplea ensu reconocido Mster Alhambra Eidos en desarrollo de software, uncurso que la mencionada compaa ha decidido impartir usando el libroelectrnico como base. As, sus alumnos, en lugar de recibir las msde 3.000 pginas en papel que hasta el curso 2008-2009 reciba, ahorase les entrega un reader en propiedad que contiene esa mismainformacin pero en formato de libro electrnico.

Sipnosis Esta obra sirve como referencia para todo programadorque trabaje en la plataforma .NET y necesite acceso a datos desdesus aplicaciones. Sirve, adems como texto de base para lapreparacin del examen oficial 70-516 (ADO.NET), parte de lascertificaciones MCTS y MCPD de Microsoft La primera parte del libromuestra los conceptos de ADO. NET relativos a acceso a datosconectados, desconectado adems del proceso de sincronizacin deellos con los gestores de bases de datos relacionales. Los ltimoscaptulos cubren las novedades de ADO. NET 4.0 como son LINQ y susvariantes LINQ to Objects, LINQ to DataSet, LINQ to DataSet, LINQto SQL, Entity Framework y los ADO.NET Data Services.

Jose Luis Hevia es ingeniero informtico y lleva mas de 12 aosdedicado a la consultora, la formacin y el desarrollo,especializado como arquitecto de software en tecnologas como .NETframework, Java y COM y el ecosistema de productos que lasconforman. Ha escrito multitud de libros relacionados con estastecnologas y su aplicacin prctica en las arquitecturasempresariales. Colabora en revistas especializadas del sector ymantiene su propio blog en: www.heviatec.net.

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

LuarnaAcceso a datos con ADO.NET 4.0 Jos Luis Hevia y ngel RayoAlhambra-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 otransformacin de esta obra solo puede ser realizada con laautorizacin 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 copiasdigitales 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 enDataTables……………………………………………………17Los DataSets/DataTables son independientes de los orgenes dedatos……………………………………………………… 18Los Datos persisten en forma de documento XML………………………………………………………………………………….18

Los Esquemas: Metadatos de los documentos XML…………………………………………………………………..19 Componentes deADO.NET………………………………………………………………………………………………………20 ARQUITECTURA ORIENTADA A CONEXIN………………………………………………………………………………………………..22 Los proveedores gestionados de datos. Los .Net Providers……………………………………………………… 22La arquitectura de los .NET Provider…………………………………………………………………………………………23 Una nueva aproximacin: Factoras deconexiones………………………………………………………………………25 UN NUEVO PARTICIPANTE : SQL SERVER2008………………………………………………………………………………………….25 NUEVAS HERRAMIENTAS DE DISEO DE CAPAS DE DATOS………………………………………………………………………………26 LOS EJEMPLOS DEL TEXTO…………………………………………………………………………………………………………………26 2.LA EXPERIENCIA ADQUIRIDA DEADO.NET……………………………………………………………………………………..28 ARQUITECTURAS DEAPLICACIONES……………………………………………………………………………………………………….28 Diferentes almacenamientos de los datos………………………………………………………………………………….29 Determinacin del modo de recuperacin de los datos…………………………………………………………………29 Modelos de diseo de aplicacionesdistribuidas…………………………………………………………………………..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………………………………………………………………………………………………………………..40NameSpaces…………………………………………………………………………………………………………………………40 Clases Desconectadas de datos………………………………………………………………………………………………..40 Clases especficas de un proveedor de datos (Conectadas a Datos)………………………………………………… 413.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 hastaahora……………………………………………………………………………………………………..70 El Pool de conexiones. ADO.NET Forever!…………………………………………………………………………………..72 Los parmetros de control del Pool de conexiones en la cadena deconexin …………………………………… 73 Utilizar elAnalizador 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…………………………………………………….. 85Ejecucin de comandos y obtencin de respuestas………………………………………………………………………87ExecuteReader y los lectores de datos(DataReader)……………………………………………………………………………….87 Mltiplesresultados……………………………………………………………………………………………………………………..92 MARS (Multiple Active Result Set)…………………………………………………………………………………………………..94 ExecuteScalar. Recuperacin de valoressimples………………………………………………………………………………….97 DML de actualizacin, DCL yDDL…………………………………………………………………………………………………………98InfoMessage……………………………………………………………………………………………………………………………………62

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

6

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

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

Los eventos de lastablas……………………………………………………………………………………………………….159 El control de versiones………………………………………………………………………………………………………….160 XML. PERSISTENCIA ESTNDAR ENADO.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 DATAPROVIDER………………………………………………………………………………………………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.NET4.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 deaislamiento……………………………………………………………………………………………………..219 Transacciones desde el lenguajeSQL……………………………………………………………………………………….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 APISystem.Transactions…………………………………………………………………………………..227 Para utilizar el nuevo API, se requiere un ensamblado……………………………………………………………..228 Transaccionesexplcitas………………………………………………………………………………………………………..229 Transacciones implcitas……………………………………………………………………………………………………….232 Transacciones distribuidas…………………………………………………………………………………………………….233EnterpriseServices………………………………………………………………………………………………………………..233 9.DATASET Y LOS SERVICIOS WEB…………………………………………………………………………………………………235 DE UNA ARQUITECTURA DISTRIBUIDA A LA ARQUITECTURA DISTRIBUIDA……………………………………………………… 235LOS SERVICIOS WEB………………………………………………………………………………………………………………………237 DATOS EN SERVICIOS WEB………………………………………………………………………………………………………………238 Consumo de un Servicio WebEstndar…………………………………………………………………………………….238Creacin del servicioweb…………………………………………………………………………………………………………………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 conplanificacin…………………………………………………………………..255 Data Source Explorer……………………………………………………………………………………………………………256 El Diseador de datos (Data Designer)…………………………………………………………………………………….260 TableAdapter Configuration Wizard………………………………………………………………………………………..262 La infraestructura de laarquitectura……………………………………………………………………………………….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………………………………………………………. 275Modificar el diseo delformulario…………………………………………………………………………………………..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 Vincularorigen de tipo Objeto a proyectosWindows………………………………………………………………….288 CONSIDERACIONES FINALES……………………………………………………………………………………………………………..292 12.VISUAL STUDIO 2010 Y LOS SERVICIOS DE DATOS (III): ASP.NET……………………………………………………. 293VNCULO A DATOS DESDE ASP.NET……………………………………………………………………………………………………293 EL ENTORNO DEASP.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 enLINQ…………………………………………………………………………………308Obtencin de un origen de datos………………………………………………………………………………………………………308 Filtrado dedatos…………………………………………………………………………………………………………………………….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 deordenacin……………………………………………………………………………………………………323 Operaciones de agrupacin…………………………………………………………………………………………………..325 Operaciones de manejo de conjuntos (Set)……………………………………………………………………………….327 Operacionescuantificadoras………………………………………………………………………………………………….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 deconcatenacin……………………………………………………………………………………………….340 14.LINQ TO XML…………………………………………………………………………………………………………………………343 DIFERENCIAS ENTRE TECNOLOGAS XML………………………………………………………………………………………………343

9

LINQ to XML vs DOM……………………………………………………………………………………………………………343 LINQ to XML vsXmlReader…………………………………………………………………………………………………….346 LINQ to XML vs XSLT…………………………………………………………………………………………………………….346 LINQ to XML vsMSXML…………………………………………………………………………………………………………346 LINQ to XML vs XmlLite…………………………………………………………………………………………………………347 CLASES DE LINQ TO XML………………………………………………………………………………………………………………347 La claseXDocument……………………………………………………………………………………………………………..348 Ejemplos de uso de los mtodos y propiedades de la claseXDocument ………………………………………… 350 Laclase XElement………………………………………………………………………………………………………………..352 La claseXAttribute……………………………………………………………………………………………………………….355 CONSULTAS DE RBOLES XML CON LINQ TO XML…………………………………………………………………………………..357 Bsqueda de elementos………………………………………………………………………………………………………..357 SEGURIDAD EN LINQ TOXML………………………………………………………………………………………………………….358 HERRAMIENTAS ASOCIADAS CON LINQ TO XML……………………………………………………………………………………..358 15.LINQ TODATASET…………………………………………………………………………………………………………………..361 VISIN GENERAL DE LINQ TO DATASET……………………………………………………………………………………………….361 CLASES DE LINQ TO DATASET………………………………………………………………………………………………………….362 DataTableExtensions y DataRowExtensions……………………………………………………………………………..362 EnumerableRowCollectionExtensions………………………………………………………………………………………363 EnumerableRowCollection………………………………………………………………………………………….364OrderedEnumerableRowCollection………………………………………………………………………………………….365 TypedTableBase……………………………………………………………………………………………………………..365 CONSULTAS CONTRADATASET………………………………………………………………………………………………………….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 unatabla………………………………………………………………………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 ClaseObjectContext……………………………………………………………………………………………………………..407 SERVICIOS DE OBJETOS………………………………………………………………………………………………………………….410 LINQ TO ENTITIES……………………………………………………………………………………………………………………….410 LENGUAJE ENTITY SQL………………………………………………………………………………………………………………….413 18.LA EXPERIENCIA ADQUIRIDA DEADO.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………………………………………………………………………………….418ExecuteStoreCommand…………………………………………………………………………………………………………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 DEDATOS……………………………………………………………………………………….431 Paso 1: Creacin del modelo entityframework………………………………………………………………………….431 PASO 2: creacin del servicio dedatos……………………………………………………………………………………..433 PASO 3: Acceso a los datos medianteREST……………………………………………………………………………….435 PASO 4: Acceso a los datos mediante clases .NET………………………………………………………………………437 20.INTRODUCCIN AL DESARROLLO CON SQL SERVER 2005:SQLCLRS……………………………………………….. 439LA 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 BDDACME…………………………………………………………………………………………..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. Durantecasi 10 aos ha estado subiendo del podio de la novedad al escaln dela necesidad. Para cualquier tipo de proyecto, .NET se haconvertido en una herramienta ms que valorada y de la que un altoporcentaje de negocios ya no pueden prescindir. Durante 6 aos hademostrado ser lo robusta y efectiva que es, recibiendo el apoyototal de todos los que estamos implicados en los departamentos deTI. Durante estos 10 aos de vida, la maquinaria de Microsoft no hadejado de trabajar y pensar. .NET no se estanca y no hace ms quecrecer. Podramos considerar estos dos aos como un periodo degestacin que ya llega a su madurez. Y el fruto de ese cambio deadolescente a adulto se plasma con la nueva versin de estasherramientas: .NET 4.0. Y esa madurez nos trae una enorme cantidadde novedades que realmente justifican este cambio de versin.Cambios en todos los niveles del framework, fruto de un estudioprofundo de lo existente, y una captura intensiva de nuevosrequisitos en las que hemos estado implicados todos nosotros. Desdeel propio motor del CLR, pasando por la adicin de numerossimasclases nuevas, reestructurando por completo el motor de ASP.NEThasta llegar a la evolucin de uno de los mejores editores dedesarrollo del mundo: el flamante Visual Studio 2010. De todasestas novedades, os iris empapando a lo largo de toda la serie detextos que se os ofrecer en nuestra editorial. Por la parte que metoca, me centrar en uno de los temas que a todos nos apasionan yque son pieza estructural bsica de todo sistema de informacin: lasherramientas de la capa de datos. Y que mejor que el nuevo ADO.NET4.0 para abordar esas tareas. En el presente texto, hablaremos delmodelo de clases de ADO.NET 4.0, pero haciendo un fuerte repaso deaquel modelo que ya se planteaba desde ADO.NET 1.1, como no puedeser 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 lomismo pues la razn es que hay novedades incluso en el modelo declases que ya conocemos, por eso ser bueno que repasemos yampliemos. Pues nada, pasamos a ver a vista de pjaro la lista decambios y pasamos ya a la chicha

ADO.NET 1.1 versus ADO.NET 4.0. Madurez de unaarquitectura.ADO.NET 1.1 ya signific un cambio importante respectoal modelo planteado por las tecnologas pre.net (ADO, OLE DB, COM).ADO.NET 4.0 ofrece numerosos cambios, unos como mejoras de laarquitecturas anteriores de ADO.NET 1.1 y ADO.NET 2.0, y otros comocambios radicales: LINQ, Entity Framework y ADO.NET Data Services.Y en todo proceso de madurez siempre aparecen nuevas formas dehacer las mismas cosas adems de mejorar aquellas existentes. Seasientan las que ya funcionaban, se revisan las que podan mejorarsey se definen nuevas estrategias para abordar ms y ms complejoscontextos -Esta sera la mejor definicin del modelo de ADO.NET-. Sicomparamos ambas arquitecturas, podremos sacar las siguientesconclusiones:

12

Lo que funciona no lo toques

El modelo de clases de ADO.NET 1.1 se mantiene impecable. Estofacilita la transicin a la nueva plataforma sobremanera. Pero conuna ventaja: CLR 2.0 es ms potente, ms eficiente y ms seguro. Lasmismas clases de ADO.NET 1.1 sern ms efectivas en 4.0 El modelo declases de ADO.NET 1.1 ya cubra un extenso conjunto de posiblescontextos. Pero a veces en casos concretos no era tan preciso tantoen funcionalidad como en diseo. As que en ADO.NET 4.0 se amplan lasfuncionalidades de las clases conocidas, para dotarlas de msprecisin en esos casos concretos. El mismo camino con la mitad decdigo. No os confiis pues, ya que las clases que ya conocis hanmejorado. De todo se aprende. APIs asncronos y nuevas utilidadespara 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 nosea por esfuerzos. En ADO.NET 1.1 haba pecadillos que se hanrediseado en ADO.NET 4.0. Hay casos como el de DataSet que producanretardos asombrosos y un consumo masivo de recursos. La experienciadel uso con este pedazo de clase, han llevado a los ingenieros deMicrosoft ha redisearla desde cero para conseguir unos tiempos derespuesta impresionantes con el mnimo consumo de recursos: hace lomismo pero mejor que nunca. Veremos en el presente texto cmoanalizar esto. Conclusin: Lo que exista, se mantiene enfuncionalidad, pero mejora en diseo interno. El mismo cdigo, denuevo, es potenciado hasta los lmites en 4.0 respecto a 1.1. Bastecomo ejemplo citar que una operacin de agregacin de filas indexadasen DataSet 1.1 tarda alrededor de 5 horas, lo que el mismo cdigo enDataSet 4.0 tarda no llega al minuto. Ah queda eso.

Nuevas herramientas

Ms contextos de anlisis llevan al desarrollo de nuevas formas deabordarlos. Por lo tanto, en ADO.NET 4.0 tena que haber mejoras.Nuevas clases y adaptacin de las existentes para contemplar lasnuevas clases. Por ejemplo, se introducen los conceptos de cargadinmica de proveedores, posibilitando la independencia del sistemagestor. De estas novedades, los siguientes cuadros de esta tabla Seincorporan los nuevos tipos Nullables capaces de almacenar valoresnulos incluso en tipos bsicos de datos. Muy tiles cuando se tratade evaluar valores de retorno en consultas SQL orientadas aobjetos. Empleando patrones de diseo y aprovechando tecnologas yapresentes en el framework, se ofrece la posibilidad de acceder acualquier proveedor de datos de forma abstracta. Esto es, quepodemos escribir cdigo conectado con independencia del proveedor dedatos. DataSet es un objeto verstil como pocos en el mundo de lainformtica. Pero el problema es que en muchos contextos se vuelvedemasiado pesado. Es por esto que ha decidido ampliar la familia:DataTable se convierte en otra pieza de responsabilidad, pudiendovivir fuera del nido con la misma potencia que su padre: lacapacidad de serializarse. Lo que lo convierte en una isla de datosde fcil portabilidad que reduce la carga de recursos y el ancho debanda en las comunicaciones. Esto claro, posibilita que el propioframework de ADO.NET abuse de este objeto cuando antes lo haca deDataSet. Llevando a nuevas sobrecargas del API ya conocido. deAcompaando al estreno de .NET 4.0 aparece en el escenario elnovsimo SQL Server 2005. No es una versin ms de SQL Server. Es LAversin de SQL Server. Slo con esto, nos podremos imaginar que unproducto que ha

Nuevos tipos de datos

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

Mejores proveedores datos: SQL Server 2008

13

estado en la mquina de la ingeniera de SW ms de 5 aos, nosofrece en funcionalidad. Y la implicacin que esto tiene en elproveedor de ADO.NET 4.0. Slo un tema entero para hablar de esto.Mejores proveedores datos: OLE DB de OLE DB ha seguido siendo unapieza clave de las capas de datos en Windows. Lgico es, que simejora la plataforma, Windows siga detrs. OLE DB ofrece mejorsoporte nativo a .NET y ofrece ms y mejores mecanismos de acceso alos datos, aprovechando las interfaces OLE DB al mximo. Mejorsoporte, ms funciones de Windows incorporadas. Por ejemplo, el poolde conexiones para todo OLE DB. El mayor cuello de botella deDataSet se ha producido siempre a la hora de sincronizar los datosdespus de sesiones intensivas desconectadas. Ahora, en sus tripas,se ha rediseado la replicacin con mejores contextos, ms controltransaccional y un cdigo Diffgram optimizado. A la par que elmodelo de clases es capaz de generar de forma automtica el conjuntode sentencias SQL necesarias para poder vivir de forma asncrona conel sistema gestor. Ante operaciones complejas y de movimientosmasivos de datos, ADO.NET 1.1 tena el problema de abordar laejecucin de comandos de forma sncrona. Lo que obligaba aldesarrollador a crear hilos de ejecucin y sincronizarlos paraevitar retardos en la ejecucin de los sistemas de informacin (enespecial la capa de UI). En el nuevo modelo de funcionalidades deADO.NET 2.0 todos los mtodos considerados potencialmentecomplicados, gozan de dos sobrecargas: la sncrona y la asncrona. Detal forma que el desarrollador no es responsable del modelo deejecucin paralelo. Slo de ejecutar y esperar la seal (evento)oportuna. Otra novedad grande: la capacidad de serializar DataSetempleando un protocolo binario propietario en el caso de escribirsistemas basados en remoting. Reduccin de ancho debando=optimizacin del rendimiento. Nuevo modelo de control deTransacciones Ahora contaremos -siempre que el proveedor nativo delas herramientas oportunas- con transacciones distribuidas y unmejor control de las transacciones atmicas. Distribucin y controlfino de bloqueos= nuevo espacio de nombres System.Transactions.Aprovechando toda la potencia del dispensador de transacciones deCOM+, ahora tenemos control total de la transaccin en nuestrosproductos. La potencia que brinda DataBinding es la de reducir elcdigo de la capa UI que consume datos a la mnima expresin. Mejorescontroles, ms contextos de uso, Databinding impecable. La novedad:el nuevo control DataBindingNavigator. Formularios conectados acdigo, sin prcticamente lneas de cdigo y con la navegacinautomatizada. Lo mejor para el final La nueva arquitectura demodelo de capa de datos: La evolucin de los DataSets tipados. Losnuevos DataAdapters permiten crear una arquitectura de datoscompleta, sin necesidad de codificar. Independiente de losproveedores, son capaces de encapsular cualquier tipo de operacinde acceso a una base de datos. Y lo ms importante: con todas lasherramientas de consultas, consultas parametrizables y operacionesMDL1. 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 cambiosde ADO.NET 4.0 eran mnimos, que se agarre los machos, que tenemosmuchas cosas que ver.

1

Lenguaje de manipulacin de datos. Comandos SQL Insert, Delete yUpdate.

14

Beneficios de ADO.NETADO.NET 4.0 ofrece una buena cantidad demejoras respecto a modelos anteriores de ADO y ADO.NET. Losbeneficios los podremos agrupar en las categoras:

Mejor InteroperabilidadLas aplicaciones basadas en ADO.NETrecogen la ventaja de la flexibilidad y la masiva aceptacin delestndar XML para el intercambio de datos. Puesto que XML es elestndar de envin de informacin entre capas, cualquier componentecapaz de Interpretar los datos XML puede acceder a la informacin deADO.NET se encuentre donde se encuentre, y procesarla. Adems,puesto que la informacin se enva en flujos de XML, no importa laimplementacin empleada para enviar o recoger la informacin -as comola plataforma empleada-. Simplemente se exige a los componentes quereconozcan el formato XML empleado para el proceso, envo y recepcinde un Dataset. En ADO.NET ahora incluso es posible emplear el nuevomodelo de DataTable para serializar la informacin. Puesto que sealmacena informacin ms concreta, se pueden abordar muchos mscontextos ms optimizados que en la versin anterior. En lugar decachear todo un Dataset, slo necesitaremos cachear aquellas tablasque se requieren. Por lo tanto, un modelo de datos ms granular ypor lo tanto ms optimo.

Mantenimiento En el ciclo de vida de una aplicacin los cambiospoco sustanciales y modestos son permisibles. Pero cuando esnecesario abordar un cambio estructural o arquitectnico delsistema, la tarea se vuelve demasiado compleja y a veces inviable.Esto es una gran desventaja de los sistemas actuales, pues muchasveces esto es una necesidad de actualizacin de los procesos de lapropia empresa. Adems, cuanto ms se aumenta el proceso de laoperativa de la empresa, las necesidades de proceso crecen hastadesbordar las mquinas. Es por ello que se separa la estructura deun programa en varias capas. Un de esas capas es la de datos, quees fundamental desarrollar correctamente. Gracias a losDatasets/DataTables, la tarea de portar y aumentar los procesos dedatos y de negocio ser ms sencillo: el intercambio de informacin atravs de XML, hace que sea ms sencilla la tarea de estructurar enms capas la aplicacin, lo que la hace mucho ms modular ymantenible. Adems, en el nuevo modelo de clases Adaptadoras de .NET4.0 y las herramientas de VS 2010, es posible definir todo unmodelo lgico de clases que encapsulan la complejidad de la base dedatos. De esta forma, cualquier cambio en la BDD (capa de datos) nonecesariamente implica cambiar cdigo en la capa de servicio dedatos (consumidor cliente de los datos). Esta herramienta ya estabadisponible en .NET 1.1 mediante los Datasets con tipo. Pero en estaversin se ha refactorizado para ofrecer mucha ms funcionalidad queantes. Con esto, prcticamente sin escribir cdigo, se nosproporcionar una capa de servicio de datos con todas lasherramientas que se requieren, y adems con la posibilidad demantener y ampliar su esquema con muchos ms servicios,independientemente de cmo est implementado en la BDD. Lo quefunciona, automatzalo. Programacin Los programadores pueden accedera un API de programacin estructurado, fuertemente tipificado y queadems se centra en la correcta forma de presentar las cosas. Centraen la estructura del lenguaje lo que un programador necesita paradisear los programas sin dar muchos rodeos. Un ejemplo de cdigo sintipificar:

15

If CosteTotal >DataSet1.Tables(«Cliente»)(10).Columns(«CreditoDisponible»)then

Como se puede observar, aparecen nombres de objetos genricos delsistema que complican la lectura del cdigo, a la par que losoperadores complican tambin la visin de la secuencia de acceso alos datos. Podramos interpretar lo que hace gracias a que aparecenlos nombres propios de los datos que necesitamos….Veamos unejemplo, 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 dellenguaje en s: las palabras Table y column ya no aparecen. En sulugar vemos que aparecen los nombres de los objetos empleados de lavida real, lo que hace el cdigo ms legible. Si a esto unimos quelos entornos ya son capaces de ayudarnos a escribir el cdigo,todava lo tenemos ms sencillo, ya que podemos ver con nuestraspalabras el modelo de objetos de datos que necesitamos en cadamomento. Incluso a nivel de ejecucin nos vemos respaldado por unsistema de control de tipos y errores que nos permitirnproporcionar una robustez innata que antes no se tena sin pasar porel uso de funciones externas. En el nuevo API de ADO.NET 4.0,incluso podremos mapear columnas, encapsular llamadas aprocedimientos externos, conectar con mltiples orgenes de datos,etc. Rendimiento Puesto que trabajamos con objetos de datosdesconectados, todo el proceso se acelera, ya que no tenemos queestar comunicndonos por Marshalling con el servidor. Adems, graciasal modelo de XML la conversin de tipos no es necesaria a nivel deCOM. Se reduce pues el ancho de banda disponible, se independiza msel cliente del servidor y se descarga ms a ste, que puede estardedicado a otras tareas en lo que el cliente analiza sus datos.Ampliando las herramientas disponibles y conociendo una limitacinimportante, en ADO.NET 4.0 se han extendido las funcionalidades deSerializacin. Me explico. En ADO.NET 1.1 el movimiento masivo dedatos entre capas empleando DataSet puede producir cuellos debotella debido a la redundancia de los datos XML y su XSD devalidacin. Existen contextos en el que esta redundancia planteafuertes limitaciones: a) Almacenaje en dispositivos temporales(memoria compartida, disco duro) b) Sistemas de proceso RPC basadosen remoting (No se requieren protocolos abiertos compatibles al100%, sino ms bien las tecnologas de ejecucin RPC) Para esto, elmodelo de serializacin de DataSet se extiende para soportar elformato binario. Un formato que permite compactar los datos yreducir el uso del esquema XSD al mnimo imprescindible. Se pierdeen portabilidad pero se gana en optimizacin. Otra de lasherramientas de mejora de rendimiento est en la incorporacin denuevas funcionalidades asncronas, por las cuales todas aquellastareas susceptibles de ser cuellos de botella, se pasan a segundoplano aadindolas todo un conjunto de seales (delegados, eventos,etc.) para su completo control con el mnimo esfuerzo. EscalabilidadLas aplicaciones Web tienen un nmero ilimitado de conexionespotenciales debido a la naturaleza de internet. Los servidores soncapaces de atender muy bien decenas y decenas de conexiones. Perocuando hablamos de miles y millones, los servidores ya no soncapaces de realizar correctamente su trabajo. Esto es debido a quepor cada usuario se mantiene una memoria 16

de proceso y conexin, un conjunto de bloqueos de recursos comopuedan ser tablas, ndices… y una comprobacin de sus permisos. Loque lleva su tiempo y recursos. ADO.NET favorece la escalabilidadpuesto que su modelo de conexin Off-Line evita que se mantengan losrecursos reservados ms tiempo del considerado necesario. Y estopermite que ms usuarios por unidad de tiempo puedan acceder a laaplicacin sin problemas de tiempos. Adems se pueden montarservicios en Cluster de alta disponibilidad que sern balanceadosautomticamente por el sistema sin afectar a las conexiones ADO. Locual garantiza la ampliacin del servicio sin representar un cambiode arquitectura de diseo.

ADO.NET: Arquitectura de datos desconectadosADO.NET est basadoen una arquitectura desconectada de los datos. En una aplicacin dedatos se ha comprobado que mantener los recursos reservado muchotiempo implica reducir el nmero de usuarios conectados y aumenta elproceso del sistema al mantener una poltica de bloqueos ytransacciones. Al mismo tiempo, si la aplicacin mantiene ms de unobjeto simultneamente, se encuentra con el problema de tener queestar continuamente conectando con el servidor para alimentar lasrelaciones existentes entre ambas, subiendo y bajando informacin vaRPC. Con ADO.NET se consigue estar conectado al servidor sloestrictamente necesario para realizar la operacin de carga de losdatos en el dataSet. De esta manera se reducen los bloqueos y lasconexiones a la mnima expresin. Se pueden soportar muchos msusuarios por unidad de tiempo y disminuyen los tiempos derespuesta, a la par que se aceleran las ejecuciones de losprogramas. Pero… qu ocurre con aquellas aplicaciones que DEBENestar conectadas a la base de datos por su diseo y situacin deproceso? Por ejemplo, una aplicacin de alquiler de pelculas, o unsistema de venta de Stock… necesitan conocer en todo momento elestado de la base de datos. Y por ello requieren una conexinpermanente con la BDD. Pues en ese caso, se continuar utilizando elmodelo de objetos de ADO.NET conectado. Pero en el API de ADO.NET4.0 se cubre mucho mejor el hueco que existe entre los dos modos defuncionamiento: el desconectado y el conectado. Gracias al nuevomodelo de Adaptadores y las funcionalidades de replicacin, esposible mantener sistemas semidesconectados que aprovechan lo mejorde los dos mundos, casi sin desarrollar cdigo.

Los Datos se almacenan en DataSets y tambin en DataTablesDe todala vida, el recoger informacin de una base de datos ha idodestinado a realizar un proceso con dicha informacin: mostrarla porpantalla, procesarla o enviarla a algn componente. Frecuentemente,la aplicacin no necesita una nica fila, sino un buen conjunto deellas. Adems, tambin frecuentemente, ese conjunto de filas procedeno de una tabla sino de una unin de mltiples tablas (join detablas). Una vez que estos datos son cargados, la aplicacin lostrata como un bloque compacto. En un modelo desconectado, esinviable el tener que conectar con la base de datos cada vez queavanzamos un registro para recoger la informacin asociada a eseregistro (condiciones del join). Para solucionarlo, lo que serealiza es almacenar temporalmente toda la informacin necesariadonde sea necesario y trabajar con ella. Esto es lo que representaun Dataset en el modelo ADO.NET. Un DataSet es una cach deregistros recuperados de una base de datos que acta como un sistemade almacenamiento virtual, y que contiene una o ms tablas basadasen las tablas reales de la base de datos. Y que, adems, almacenalas relaciones y reglas de integridad existentes entre ellas paragarantizar la estabilidad e integridad de la informacin de la basede datos. Muy importante es recalcar, que los Datasets sonalmacenes pasivos de datos, esto es, que no se ven alterados antecambios subyacentes de la base de datos. Es necesario recargarlos(FillDataSet) siempre que queramos estar al da en cuanto a datos serefiere.

17

Figura 1. Envo de Datasets entre componentes

Una de las mayores ventajas de esta implementacin, es que unavez recogido el dataset, ste puede ser enviado -en forma de flujoXML- entre distintos componentes de la capa de negocio como si deuna variable ms se tratase, ahorrando as comunicaciones a travs dela base de datos. Pero la clase DataSet es una clase quepotencialmente puede consumir muchos recursos. En su modelo declases -y como toda buena base de datos- es posible subdividir sucomplejidad en clases ms pequeas. Es por esto que al igual que unabase de datos se compone de tablas, un Dataset se componga deDataTables. Pero la novedad no est ah, sino en proporcionar nuevasfuncionalidades que permiten evolucionar DataTable y colocarlo almismo nivel funcional que DataSet. Esto es, que DataTable se puedeserializar y puede ser utilizado de forma autnoma, sin requerir eluso completo de la clase Dataset contenedora. Eso si, siguen siendopartes constitutivas, lo cual quiere decir que siguen conviviendojuntos como hasta ahora pero con la salvedad de que ahora DataTablees mayor y es capaz de vivir por su cuenta cuando sea menester.

Los DataSets/DataTables son independientes de los orgenes dedatosUna consecuencia lgica de este tipo de arquitecturas, es la deconseguir que los objetos desconectados sean independientes de losorgenes de datos. Los drivers OLE-DB, los proveedores .NET, etc.transformarn la consulta SQL en un Cursor representado con unaestructura XML, que es independiente del motor de la base de datos.Es ms, si encima encapsulamos toda la capa de datos en cmodosprocedimientos almacenados, ni siquiera necesitaremos integrar elcdigo SQL en la capa de negocio, lo cual todava independiza ms elDataSet/DataTable de la base de datos (ya que el cdigo SQL,actualmente no es tan estndar…). Esto nos permitir trabajar conmltiples orgenes de datos, de distintos fabricante e incluso no-base de datos -como por ejemplo ficheros planos u hojas declculo-… lo que representa un importante punto de compatibilidady flexibilidad. Si a esto unimos que disponemos de un modeloconsistente de objetos (xmlDOM) que es independiente del origen dedatos, las operaciones -y toda su potencia- de losDatasets/Datatables no se vern afectadas por dicho origen.

Los Datos persisten en forma de documento XMLLa persistencia esun concepto muy interesante en el mundo del desarrollo. Es unmecanismo por el cual un componente puede almacenar su estado(valores de variables, propiedades, datos… en un momento concretodel tiempo) en un soporte de almacenamiento fijo. De manera, quecuando es necesario, se puede recargar el componente tal y comoqued en una operacin anterior. En un sistema de trabajo Off-Linecomo el que plantea ADO.NET, la persistencia es un mecanismofundamental. Podemos cerrar la aplicacin y mantener persistentestodos los DataSets necesarios, de manera que al reiniciarla, nosencontramos los DataSets tal y como los dejamos. Ahorrando eltiempo

18

que hubiera sido necesario para recuperar de nuevo toda esainformacin del servidor. Optimizando todava ms el rendimiento delsistema distribuido. El formato que emplea ADO.NET para almacenarsu estado es XML. Puesto que ya es un estndar de la industria, estapersistencia nos ofrece: La informacin podra estar accesible paracualquier componente del sistema que entienda XML. Es un formato detexto plano, no binario. Que lo hace compatible con cualquiercomponente de cualquier plataforma y recuperable en cualquiercaso

Los Esquemas: Metadatos de los documentos XMLMuchas vecesnecesitamos conocer el cmo se estructura un Dataset para poderaveriguar qu columnas tenemos disponibles, con qu tipo de datos,tamao, etc. A esta informacin que define el cmo se estructura lainformacin de le denomina Metadatos (Datos que definen datos). Enel caso de los documentos XML, el que determina la estructura questos tienen son los Esquemas. No son necesarios para la codificacindel documento XML, pero refuerzan su estructura a la par queestablece una manera comn de introducir nuevos datos respetando unjuego de reglas bsico, que toda aplicacin debe respetar si quieremantener intacta la integridad del documento original. En ADO.NETla generacin de los esquemas as como de los documentos XMLasociados a una base de datos son automticos y transparentes alusuario. No se necesitar acceder a ellos a bajo nivel, a menos quesea requisito del diseo. Dichos esquemas se actualizarn cuando semodifique la base de datos o las consultas empleadas para acceder alos datos. Lo dicho, todo transparente al usuario. Y proporcionarntoda 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 siguientemanera:

19

Figura 3. Esquema XML de la tabla Usuarios

Aunque parezca un poco galimatas, se puede observar que endocumento XML se pueden observar las caractersticas de la tabla sinnecesidad de contar con el Enterprise Manager: Las estructuraselement que definen la tabla y los campos de la tabla, lasestructuras key que definen claves primarias y las estructurascomplexType que permiten agrupar tipos simples en estructuras de msalto nivel.

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

Figura 4. Modelo de Componentes de ADO.NET

Como parte de los componentes presentados en el grfico de laplataforma de datos de ADO.NET, tendremos:Componente DataSetDescripcin Modelo jerrquico de representacin de una

20

base de datos con arquitectura desconectada. DataTable DataSetcommand Representa la estructura de una tabla: coleccin de columnasy filas. Conjunto de procedimientos ADO.NET de ejecucin de comandosSQL.Tabla 1

Como se puede observar, los datos son recogidos del servidor porlos componentes DataSetCommand mediante la ejecucin de comandos SQL(procedimientos almacenados, vistas, consultas…) en el componentede negocio por los objetos DataSets. Empleando la interfaz XML,estos componentes entregan la informacin al nivel de interfaz deusuario, que a travs de entornos WEB, formularios estndar deWindows o bien herramientas especializadas pueden ya procesar yanalizar la informacin. Y a modo de ejemplo, en la capa de interfazde usuario:Componente WebForms2 WinForms3 Descripcin Interfaz deusuario basada en componentes DHTML visualizables en un navegador.Interfaz de usuario basada en componentes GUI del entorno deWindows, a travs de programas ejecutables. Conjunto de herramientascliente- servidor que permiten automatizar los procesos denegocio.Tabla 2

BizTalk4

En los siguientes temas, se proceder a la documentacin de lasdistintas clases .Net dedicadas a las tareas de recuperacin de losdatos y que estn recogidas en las libreras:Nombre clase de laDescripcin Espacio de nombres que integra la gran mayora de clasesque habilitan el acceso a los datos de la arquitectura .NETContiene las clases compartidas para los .NET Providers5(proveedores .NET). Proporcionan la coleccin de clases necesariaspara acceder a una fuente de datos (como por ejemplo una Base deDatos). Espacio de nombres que permite el acceso a proveedores SQLServer en su versin 7.0 y superior. Este espacio de nombres ha sidoampliado para soportar las nuevas caractersticas de SQL Server2005.

System.Data

System.Data.Common

System.Data.SqlClien t

2

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

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

21

Nombre clase

de

la

Descripcin Espacio de nombres con multitud de herramientas parainteractuar con el nuevo motor de SQL Server 2005: enumeracin deservidores, gestin del servidor, implementacin de objetos de laBDD, etc. Slo para SQL Server 2005. Espacio de nombres que permiteacceder a proveedores .NET que trabajan directamente contracontroladores basados en los ActiveX de Microsoft Espacio denombres que contiene las clases que actan de pasarela con el modelode drivers ODBC de Windows. Emplean InterOp para acceder a losdrivers nativos ODBC, pero proporcionan un marco de compatibilidadhacia atrs muy importante para muchos fabricantes de SW. Espacio denombres, desarrollado por Microsoft, que posibilita el acceso arecursos de sistemas gestores de Oracle. Dependen del clientenativo de Oracle instalado en la mquina. Es recomendable queaccedis a la web del fabricante para acceder a versiones msactualizadas y desarrolladas por el propio fabricante. Integra elconjunto de clases internas de las que se componen los proveedoresde datos. Proporciona la encapsulacin en clases de todos los tiposde datos nativos de SQL Server y sus funciones de manejo deerrores, 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 laresolucin de contextos de datos es la de vivir conectados a losmismos. Una aplicacin de estar conectada con el sistema gestor paraacceder en tiempo real a los datos que almacena. En ADO.NET 2.0este modelo no ha cambiado mucho respecto a la versin anterior. Esque el que menos ha cambiado, si bien si incorpora mejoras en lafuncionalidad que eran necesarias. Repasemos algunos conceptos eintroduzcamos las novedades

Los proveedores gestionados de datos. Los .Net ProvidersLosproveedores gestionados -Managed Providers o .NET Providers- dedatos hacen referencia a los mecanismos por los cuales un programapuede acceder a los recursos de un servidor de bases de datos. Sonel conjunto de componentes que interactan como mediadores paraindependizar el programa de la base de datos. En trminos yaconocidos, son el equivalente a la arquitectura OLE-DB deMicrosoft. 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 losproveedores gestionados estn encapsulados en un conjunto de clasesque, precisamente, hacen transparente al programador el acceso alos recursos de los drivers de acceso a un servidor de datos. Sonel modelo de clases del API de programacin de un origen de datos.De ah que en la tabla anterior nos encontremos con clasesespecficas de algunos fabricantes como es el case deSystem.Data.SqlClient, que encapsula toda la potencia yflexibilidad de la API de SQL Server. De esta manera el acceso alos datos es ms directo y no se requiere de multitud de componentesintermedios para realizar una accin, ni perder funciones especficaspor compatibilidad con otras plataformas. En la plataforma .NET seofrecen con el SDK, los proveedores gestionados: SQL ManagedProvider. Ofrece el conjunto de clases necesarias para comunicarsecon los comandos de SQL Server en su versin 7.0 superior. Especialhincapi en que este espacio de nombres ha sido evolucionado parasoportar las nuevas tecnologas de SQL Server 2008, que no sonpocas. Lo que se conoce se mantiene, pero investigar las novedadesque son extremadamente potentes. OleDB Managed Provider. Ofrece elconjunto de clases necesarias para acceder fuentes de datosaccesible a travs de drivers OLEDB/ODBC. En las mejoras de ADO.NET4.0 el haber ampliado el soporte que el CLR da a estos tipos deproveedores, como por ejemplo la integracin mejorada de laseguridad, el pool de conexiones, etc. ODBC Managed provider.Conexiones con el modelo de drivers de la pasarela ODBC nativa deWindows. No se garantiza en todos los casos el mismo soporte porparte del CLR, pero se ha extendido la funcionalidad para soportarms y mejores caractersticas de los ms potentes y recientes. ORACLEManaged Provider. Portado de la versin ADO.NET 1.1. Extendido paragarantizar la compatibilidad con el cliente de Oracle en su versin9. Si necesitis soporte para versiones superiores, ser bueno ir ala web de la propia Oracle o emplear sus homlogos ODBC/OLEDB.

La arquitectura de los .NET ProviderToda clase que aspire a .NETProvider, debe cumplir que en su espacio de nombres implemente lasclases derivadas de: Connection. Que ser la clase encargada deencapsular toda la funcionalidad de conexin a las fuentes de datos.Command. Que ser la que encapsula el envo de comandos SQL alservidor. DataReader. Que contiene todo el subsistema de lectura delos cursores resultados de una Query DataAdapter. Que es elcomponente encargado de adaptar el conjunto de operacionesrealizadas desde un origen genrico (por ejemplo, un dataSet) haciaun 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,.SqlClientimplementa las clases: SqlConnection SqlCommand SqlDataReaderSqlDataAdapter Adems, los .NET Providers tienen la capacidad deenviar/recibir y almacenar persistentemente de manera off-line todoel flujo de informacin en formato XML. Suelen implementar losmtodos ReadXML y WriteXML para poder implementar estafuncionalidad. Actualmente estn en fase final los proveedoresgestionados de SQL Server (SQL Managed Providers) y los de para elacceso a todo el soporte de datos fabricado sobre lasespecificaciones de OLE-DB, Microsoft proporciona el conjunto declases de ADO.NET que tiene compatibilidad con los proveedores dedatos OLE-DB (ADO Managed Providers):Nombre del proveedor OLEDBSQLOLEDB MSDAORA JOLT MSDASQL/SQLServer ODBC MSDASQL/Jet ODBCDescripcin del proveedor Proveedor SQL Server OLEDB ProveedorORACLE OLEDB JET OLEDB Provider (proveedor de bases de datos JET)Acceso va Direct-ODBC a sistemas SQL Server (conexiones ODBC atravs 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 hacrecido hasta prcticamente ofrecer proveedores para todo sistemagestor que se puede encontrar en el mercado: DB2, MySQL, Informix,etc. Para ms informacin, visitad las web de los respectivosfabricantes.

24

Bien, despus de haber introducido los conceptos bsicos de laplataforma .NET orientada a los datos de la nueva arquitectura deMicrosoft, pasamos ya a describir con todo detalle la nuevapropuesta de Microsoft para el acceso a los datos.

Una nueva aproximacin: Factoras de conexionesEn ADO.NET 2.0 seha evolucionado el modelo de los proveedores de tal forma que noslo contemos con conexiones con proveedores concretos conocidos deantemano, sino que adems podamos en tiempo de ejecucin elegir elproveedor que necesitamos. Esto facilita la generacin dearquitecturas de SW o productos DataProvider agnostics es decir,independientes del proveedor. No es que no fuera posible enversiones anteriores, pero las herramientas que se proporcionabanno iban encaminadas a estos menesteres. Casi se sugera que eraresponsabilidad del programador el crear un modelo de servicio parahacer el cdigo ms abstracto, no haciendo fcil la cara dinmica declases como si era factible hacer en los modelos de los antiguosOLEDB a travs de la cadena de conexin. El caso, es que todoapuntaba a poder implementar un modelo independiente del proveedor,pero al final la complejidad de anlisis y su puesta en produccinapostaba a por modelos ms sencillos, en los que era el propiodesarrollador el que se montaba la capa de servicios de datos y lareemplazaba en el caso de cambiar de sistema gestor. Pero en laversin 2.0 de ADO.NET se ha escuchado a todos los desarrolladoresque demandaban esta funcionalidad. Y se ha implementado de unaforma muy elegante, siendo una opcin ms en el SDK que no estorba,pero que se puede utilizar para mejorar el cdigo o abordar estoscontextos, sin modificar todo lo ya conocido. A travs de losprincipios de abstraccin y la carga dinmica de clases, podremosgenerar cdigo independiente del sistema gestor. Pero ya lo veremosen su momento.

Un nuevo participante: SQL Server 2008Para acabar con estasomera introduccin a lo que trataremos en este texto, no poda dejarde lado al nuevo participante en las tecnologas corporativas: SQLServer 2008. Un nuevo producto de Microsoft que no ha sido slo unlavado de cara del ya soberano SQL Server 2000. Rediseado desdecero, se ha puesto al da con las nuevas tecnologas y ofrece cientode novedades que harn nuestros aplicativos corporativos mucho msproductivos que nunca. No es plan dedicar este texto a SQL Server2008, pues ya hay otros autores que estn con ello, pero no puedoevitar hablar del tema, ya que va de la mano de las mayores mejoresde las clases de ADO.NET. En SQL Server 2008 podemos decir queexisten tres grandes bloques que afectan a ADO.NET: a) Los nuevosAPI, frameworks y servicios de SQL Server 2008. Como, por ejemplo,Notification Services, Service Broker, etc. Que obviamente ofrecenmultitud de herramientas para simplificar ciertos contextoscorporativos a la mnima expresin. b) Las nuevas caractersticas delCORE de SQL Server 2008. Que hacen que el servidor ofrezca mejoresherramientas, y un lenguaje TSQL ms potente y con ms funcionalidadque el anterior. A la par que .NET se embute en el propio CORE,dando al desarrollador la oportunidad de desarrollar objetos dedatos empleando esta tecnologa: procedimientos almacenados,funciones incluso nuevos tipos de datos. c) Las nuevascaractersticas del servidor de administracin. Lo cual llevar a losdesarrolladores a interactuar de un modo ms concreto con todo elmotor de la base de datos, automatizando virtualmente cualquiertarea 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, conla mnima interaccin por parte del desarrollador.

Figura 6. SQL Server Enterprise Manager y los interfaces deprogramacin 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 muchascosas que contar.

Nuevas herramientas de diseo de capas de datosUna de las mayoresnovedades ya incluidas en ADO.NET 2.0 y mantenida y mejorada enADO.NET 4.0, est en el nuevo soporte que da para la construccin decapas de datos. Entendiendo por capa de datos la abstraccin lgicaque montamos para independizar una capa lgica de aplicacin de capasde ms bajo nivel. Para esto, ADO.NET ofrece dos nuevos frameworksde encapsulacin de la capa de datos: a) Mejores controlesvinculados a datos. Nuevos controles, evoluciones de los anterioresel caso es que hay un 20% de mejoras en las tecnologas de MS deDataBinding. Muchas ms propiedades que antes, que mejoran laproductividad a niveles impresionantes. Baste decir que montar unformulario maestro/detalle nos lleva escasos 5 minutos, que cargaruna combo a partir de una coleccin es una lnea de cdigo, etc. Y queel nuevo control DataBindingNavigator nos ofrece todas lasherramientas de navegacin y manipulacin de datos sin picarprcticamente cdigo. b) Una arquitectura de acceso a datos basada enlos esquemas de datos. Totalmente integrado con VS 2010, laposibilidad de generar una capa de acceso a datos totalmenteencapsulada en clases, basada en la descripcin del modelo de datosa partir de esquemas XSD. A partir de dicho esquema XSD, se generael cdigo necesario para dar al desarrollador todas las herramientasque demande para navegar y manipular los datos. Y poder cambiarloen cualquier momento, simplemente accediendo al esquema y aadiendoo quitando funcionalidad. Y, como no, integrado con toda latecnologa de DataBinding. Lo veremos, una maravilla. Que dejemosclaro a muchos gustar a otros no. Pero aqu lo dejamos caer.

Los ejemplos del textoEn todos los captulos, debajo del cdigofuente tendris especificada la carpeta del proyecto del que se esthablando en cada momento.

26

Bien, pues despus de este pedazo de presentacin creo que esmomento de entrar de lleno en el nuevo ADO.NET 4.0. Manos a laobra.

Publicaciones Similares