lunes, 2 de marzo de 2009

Conexión a base de datos por DbProviderFactory


El acceso a las bases de datos es una de las principales y primeras tareas a realizar por el software. Muchos de los proyecto atacan a la base de datos instanciando directamente al driver de base de datos proporcionado por el fabricante, de forma que en caso de querer cambiar de base de datos nos vemos obligados a cambiar el código de la aplicación, recompilar y volver a distribuirlo.

Para poder evitar esto, .NET ó Mono nos proporciona métodos para poder crear la conexión a base de datos mediante lo que se denomina factoría de base de datos. Consiste en que mediante una factoría, es capaz de instanciar cada uno de los posibles tipos de base de datos que estén registrados en el GAC o en el path de la aplicación.

Para la explicación, nos apoyamos en un ejemplo para una base de datos Postgresql.

Primero se necesitará editar el archivo de configuración de la aplicación, en el caso de una aplicación web, será el web.config y en el caso de una aplicación de ventanas, será el app.config.

En este caso nos vamos en un app.config.

app.config
<configuration>
<system.data>
<dbproviderfactories>
<add name="Npgsql Data Provider" invariant="Npgsql"
description=".Net Framework Data Provider for Postgresql"
type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.2.0,
Culture=neutral, PublicKeyToken=5d8b90d52f46fda7">
</add>
</dbproviderfactories>
</system.data>
</configuration>


En esta configuración estamos indicando que cuando llamemos a la factoría con el nombre Npgsql, automáticamente instanciará las clases de conexión desde el driver de Postgresl. Todas las clases instanciadas se pueden manejar o bien mediante el interfaz genérico (System.Data.IDbConnection para las conexiones) o por las clases comunes de ADO.NET (System.Data.Common.DbConnection para las conexiones).

Para crear una conexión desde la factoría de nuestro ejemplo haremos:

string sFactory = "Npgsql";
DbProviderFactory dbFactoria = DbProviderFactories.GetFactory(sFactory);
DbConnection dbConexion = dbFactoria.CreateConnection();


Con esto ya tendríamos creado nuestro objeto conexión para atacar a la base de datos.

No hay comentarios:

Publicar un comentario