usando Data Access Application Block en la capa de Acceso a Datos (DataAccess)

en primer lugar quisiera opinar sobre este post de  Luis Ruiz Pavon, y sobre todo en los comentarios ahí vertidos. Y estoy totalmente de acuerdo, con algunos, como por ejemplo que no hay que usar algo porque está de moda, sino porque realmente nos es útil en el proyecto, nos hace más productivo, entendemos el código más rápido ya que está dividido en capas, pero también es obvio como comentaba un usuario, si estás en un proyecto de 12 a 18 meses, y en medio proyecto sale una nueva monería para el uso del proyecto, pues la decisión de cambiar es un riesgo, que el arquitecto de la solución deberá tomar. Y es así que entiendo y partiendo como premisa, el arquitecto de solución deberá analizar, y reanalizar bien la solución planteada. Y esto debe ser así, para proyectos grandes, y para proyectos con infraestructura compleja, integrar varios servidores, escoger un buen protocolo de transporte, orquestar todo eso… y todo lo demás que se fuman los arquitectos. Pero hay proyectos de no tan larga duración ni estructura tan compleja, que algunas veces no se incluye un arquitecto en el equipo, y en este caso se debería medir la utilidad, productividad del modelo en capas, y esta demás que si nunca hemos usado un modelo, a mi parecer el modelo en capas nos caería muy bien para empezar.

Ahora en cuanto  a la capa de acceso a datos, esta es importantísima, y si se ha usado un bueno modelo, es decir que tenga el mejor rendimiento, el mejor control de excepciones, escalabilidad, entre otras cosas, no habría porque hacerle una migración por la salida de un nuevo juguete para el acceso a datos. Y si hemos usado un bueno modelo, esa capa se puede mantener, y sólo cambiar la demás capas, por ejemplo para cambiar de Win, a Web, a VSTO, a WPF. Y si nuestra arquitectura debe evolucionar por el crecimiento de la organización, y debemos exponer nuestro negocio a través de servicios (SOA), ya sea usando WS o ahora WCF, podemos reutilizar ahí nuestra capa de acceso a datos. Imagino que en el futuro además del modelo de capas, y de SOA, habrá una nueva evolución, y espero que nuestra capita de acceso a datos se siga usando :).

Patterns and Practices home

Bueno y al punto, y al tema del post es el uso Enterprise Library for .NET Framework 2.0. En algunos casos he recibido consultas sobre como usar EntLib. Trataré de resumirlo en cuatro pasos, y mi parecer esto siempre existía incluso cuando usábamos el SqlHelper, o cuando lo hacíamos manualmente, y es que lo que ha cambiado son las herramientas, y el código pero no la forma:

  1. Importar los componentes de funcionalidad. En este caso para usar el Data Access Application Block, parte del EntLib, es referenciar o importar las DLL, o ensamblados, que se instalan con el EntLib. Son 3 las que se usan, bueno sólo hay que referenciar 2, la otra se agrega por depender de la otra. Las dos que debemos referenciar son: Microsoft.Practices.EnterpriseLibrary.Data.dll, y Microsoft.Practices.EnterpriseLibrary.Common.dll, automáticamente se debe agregar al bin el ensamblado Microsoft.Practices.ObjectBuilder.dll. De no pasar esto pues la copiamos manualmente a la carpeta de bin, o donde se ejecute nuestra aplicación.
  2. Escoger y conectarnos a una fuente de datos. Con el DAAB, tenemos una forma genérica para conectarnos a una base de datos, por ejemplo es transparente comunicarse a SQL o Oracle:

    DAB.Database dbTampico =
                DAB.DatabaseFactory.CreateDatabase(“cnTampico”);

    Hay que tener en cuenta, que al hacer esto, automáticamente esta iendose al archivo de configuración de la aplicación, y esta leyendo la cadena de conexión dentro de la sección de conecctionStrings. Indicar que en la conexión agregada en la sección de conecctionStrings se debe indicar el provider de la base de datos, es decir si es SQL o Oracle.

    Ahora la otra forma es hacerlo a un proveedor especifico como SQL o Oracle, hay clases especiales para ello:

    DAB.Sql.SqlDatabase dbTampico =
             new DAB.Sql.SqlDatabase(
                       “data source=.; integrated security = true; database=BD_Tampico”);

    Ya en cadenas de conexiones hay gustos y sabores.

  3. Recuperar, enviar información, es decir hacer transacciones con la fuente de datos. Y para el ejemplo sólo quiero traer todas las noticias:

    DataReader drPropuesta = dbTampico.ExecuteReader(
               CommandType.StoredProcedure, “usp_Noticias_TraerTodos”);

    Y eso es independiente si dbTampico es Database, SqlDataBase, u OracleDataBase, obviamente mientras más genérico menos se aprovecha funcionalidades particulares.

  4. Mostrar  la información. Y por último sólo queda mostrar la información recuperada:

    while (drPropuesta.Read())
    {
          Console.WriteLine(“Noticia: {0}”, 
                        drPropuesta[“Titulo”].ToString());
    }

  5. Estirar las piernas, ejecutar y mirar como funciona !

Obviamente que hay más cosas que ver en Data Access Application Block, y muchas más cosas que se pueden hacer, pero sólo es cuestión que lean, lean, lean y lean, pero también entiendan :),

Saludos,

Post cruzado

17 comentarios sobre “usando Data Access Application Block en la capa de Acceso a Datos (DataAccess)”

  1. Buenas, soy bastante novato con el visual estudio, usando C#, documentandome sobre el DAAB. Y mi pregunta denotará hasta donde llega lo novato que soy, pero agradeceré cualquier respuesta.

    He instalado la Enterprise Library, hago las referencias, pero no entiendo lo de “DAB.database” quiero decir, ¿a que te refieres con DAB?

    Como ejemplo yo tengo mi base de datos en “c:misdocumentosBD”, ¿qué tendría que hacer?

    Gracias por todo, y por la paciencia jaja

    P.D: si pudierais contestarme en ilyamuybuenas@hotmail.com lo agradecería, pero no es fundamental, estaré atento a la web, gracias

  2. Holas Ilia!

    Lo que pasa es que en la declaración de NameSpace, creo un Alias para el NameSpace del Enterprise Library:

    using DAB = Microsoft.Practices.EnterpriseLibrary.Data;

    “Como ejemplo yo tengo mi base de datos en “c:misdocumentosBD”, ¿qué tendría que hacer?”

    Estas usando Access?, no te animas a usar SQL Server 2005?

    Saludos,

  3. hola!!! me ha resultado muy util esta explicacion porque he empezado con DAAB muy desorientada.

    ahora mi problema es que no me está reconociendo el proveedor, voy a poner lo que tengo vale? gracias!!!!

    a ver, en la pagina principal (en el cs) es donde me creo Database:
    ——————————————-
    DAB.Database db = DAB.DatabaseFactory.CreateDatabase(“DBConn”);
    ——————————————–
    “DBConn” la tengo definida en el web.config, en la seccion connectionstrings, lo pongo:
    ——————————————–



    ———————————————
    y el fallo me salta en la clase DatabaseConfigurationView.cs, en el método GetDefaultMapping, donde me dice que “ha sido imposible encontrar en .NET Framework Data Provider solicitado.Puede que no esté instalado”
    (traduccion mia al español por supuesto).

    Si lo hago con ADO.NET normal sí que me reconoce al proveedor correctamente, he podido pasar algo por alto?

    gracias y un saludo

    charo

  4. hola!!! soy yo otra vez, ya lo he conseguido por la segunda forma que pusiste de especificar el provider. lo pongo a continuacion:

    1)en web.confing dejo puesto lo mismo que antes, no he modificado nada.
    2)en el cs de la pagina principal pongo lo siguiente:

    string connectionstring = WebConfigurationManager.ConnectionStrings[“DBConn”].ConnectionString;

    DAB.Sql.SqlDatabase db = new DAB.Sql.SqlDatabase(connectionstring);

    y ya le doy a ejecutar y sale genial.

    GRACIAS! aunque sea por haberlo leido!

  5. Holas Charo!

    Lo más importante es que ya esta funcionando!, si tienes algún otro problema u soluciones nos comentas, ya uqe puede servir a otros más usuarios :), gracias a ti!

    Saludos,

  6. Buenas y gracias por leer!!, no sé si todavía hay alguien leyendo este foro pero por si acaso hay suerte…

    El caso es que tengo una aplicación que ya funciona con SQL Server y quiero que lo haga ahora con Oracle. Me informé y dí con el “data access application block” que encapsula la base de datos y me viene genial, pero mi duda es: ¿con esta librería ya no puedo usar el diseñador para generar las consultas de forma automática?
    hasta ahora en el diseñador agrego un SQLDataAdapter y con un asistente me genera la sql automáticamente.

    Si saben de alguna solución les estaré muy agradecido

  7. Hola Sergio, tu blog me ha sido de mucha utilidad actualmente me encuentro trabajando por primera vez con las librerias de Enterprise Library.

    Me pregunto si eres de Tampico Tam. Sabes yo tambien soy de tierra Jaiba actualmente trabajando en MTY, me pregunto si puedo tener contacto contigo para dudas futuras?

    Gracias de antemano y que te encuentres muy bien.

  8. Hola porfavor necesito tu ayuda urgente, mi problema es k cuandoe jecuto mi aplicacion ewn red, no me deja conectar asi k voy hacerlo con Data Access Application Block, pero nose como programarlo ya k todo los ejemplos estan en C, lo puedes traducir en Basic . porfavor gracias …s puedes respondeme porfavor m smsn es alexis.ad@hotmail.com..

  9. Hola Sergio, sabes estoy trabajando vb.net 2005 y sql 2005, y trabajo con varios servidores, por que mi aplicacion la trabajo para varias empresas y por tanto lo unico que cambio son el nombre del servidor.
    las conexion la hago con
    Microsoft.Practices.EnterpriseLibrary.Data

    DatabaseFactory.CreateDatabase(“Coenexion”);

    “conexion” la tengo definida en el app.config, en la seccion connectionstrings, sabes cuando cambio de servidor , normal hacia la conexion, pero resulta que ahora no lo reconoce , me sale una conexion a un servidor anterior, por mas que he recompilado el proyecto, que esta en 3 capas. ya no se que hacer. de antemano muchas Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *