none
¿ Usar machine.config y ConfigurationManager ? RRS feed

  • Pregunta

  • Hola,

    Estoy intentando crear alguna clase o clases que me permita crear código agnostico al proveedor de acceso a datos con DbProviderFactories y DbProviderFactory.

    Y la cuestión es que leyendo y leyendo por MSDN y la página web de David Hayden (usad google ^^) entiendo que debo usar el machine.config para añadir los proveedores/conectionStrings para recoger de forma concreta el que yo quiera y que use el código agnóstico.

    Lo que he sido hasta ahora incapaz es de encontrar el machine.config, incapaz de crearlo, o incapaz de saber como manejarlo. He leido acerca del namespace system.configuration.ConfigurationManager. Pero no tengo visibilidad de este último. Solo hasta system.configuration.

    Solo veo dentro de los proyectos el respectivo app.config, me pregunto si se puede hacer igual con este.

    Ah,... si, se me olvidaba... para los kiskillosos estoy usando Visual Studio 2008 para VB y la versión 2.0 del framework : )

    Un saludo y gracias de antemano.
    domingo, 4 de mayo de 2008 20:37

Respuestas

  • Primero el machine.config esta en la carpeta de windows y la versión del framework que utilices.

     

    C:\WINNT\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

     

    Pero para lo que quieres hacer no tienes que utilizar la configuración de la máquina Y obligar a todas las aplicaciones utilizar la misma configuración.

     

    Yo por ejemplo en mi DAL tengo dos opciones, que coja por defecto una conexión siempre con el mismo nombre en el fichero de configuración de la aplicación web o le paso la conexión como parámetro para que utilice la correcta, de esta manera podrías utilizar en la misma aplicación dos bases de datos de diferentes proveedores.

     

    Code Snippet

    DAL

     

    ///

    /// Crea una instancia del acceso a la base de datos.

    ///

    public BaseDatos() {

    Configurar(ConfigurationManager.ConnectionStrings["MyProviderConnectionString"]);

    }

    public BaseDatos(ConnectionStringSettings conString)

    {

    Configurar( conString );

    }

     

     

     

    Dependiendo del constructor utilizo la conexión por defecto o utilizo la que le paso.

     

    Code Snippet

     

    private void Configurar( ConnectionStringSettings conString )

    {

    try

    {

    this.cadenaConexion = conString.ConnectionString;

    BaseDatos.factory = DbProviderFactories.GetFactory(conString.ProviderName);

    this.conexion = factory.CreateConnection();

    ...

     

     

    Entonces la clase factory creara el proveedor correcto dependiendo del proveedeor de la cadena de conexión.

     

    Code Snippet

     

    MUY IMPORTANTE INFORMAR EL PROVEEDOR!!!

    <connectionStrings>

    <add name="MyProviderConnectionString" connectionString="Data ..."

    providerName="System.Data.SqlClient"/>

    </connectionStrings>

     

     

     

    Espero haberme explicado bien.

     

    Si la respuesta ha sido de utilidad marca la como correcta.

     

    Saludos.

     

    lunes, 5 de mayo de 2008 12:09
  •  

    Tambien debes agregar la referencia al ensamblado System.Configuration

     

    En el Explorador de soluciones: Click derecho, Referencias, Agregar Referencia y la seleccionas en la pestaña .net.

     

    El machine.config lo puedes utilizar cuando son varias aplicaciones en el equipo las que van a utilizar la configuracion (en este caso cadena de coneccion, pero tambien podria ser un proveedor, o algo asi), esa cadena de conección, de esta forma agregas ó modificas la cadena en un solo archivo y no en varios. Si solo es una aplicacion es mejor que utilices el app.config o web.config.

    martes, 6 de mayo de 2008 1:24

Todas las respuestas

  • Primero el machine.config esta en la carpeta de windows y la versión del framework que utilices.

     

    C:\WINNT\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

     

    Pero para lo que quieres hacer no tienes que utilizar la configuración de la máquina Y obligar a todas las aplicaciones utilizar la misma configuración.

     

    Yo por ejemplo en mi DAL tengo dos opciones, que coja por defecto una conexión siempre con el mismo nombre en el fichero de configuración de la aplicación web o le paso la conexión como parámetro para que utilice la correcta, de esta manera podrías utilizar en la misma aplicación dos bases de datos de diferentes proveedores.

     

    Code Snippet

    DAL

     

    ///

    /// Crea una instancia del acceso a la base de datos.

    ///

    public BaseDatos() {

    Configurar(ConfigurationManager.ConnectionStrings["MyProviderConnectionString"]);

    }

    public BaseDatos(ConnectionStringSettings conString)

    {

    Configurar( conString );

    }

     

     

     

    Dependiendo del constructor utilizo la conexión por defecto o utilizo la que le paso.

     

    Code Snippet

     

    private void Configurar( ConnectionStringSettings conString )

    {

    try

    {

    this.cadenaConexion = conString.ConnectionString;

    BaseDatos.factory = DbProviderFactories.GetFactory(conString.ProviderName);

    this.conexion = factory.CreateConnection();

    ...

     

     

    Entonces la clase factory creara el proveedor correcto dependiendo del proveedeor de la cadena de conexión.

     

    Code Snippet

     

    MUY IMPORTANTE INFORMAR EL PROVEEDOR!!!

    <connectionStrings>

    <add name="MyProviderConnectionString" connectionString="Data ..."

    providerName="System.Data.SqlClient"/>

    </connectionStrings>

     

     

     

    Espero haberme explicado bien.

     

    Si la respuesta ha sido de utilidad marca la como correcta.

     

    Saludos.

     

    lunes, 5 de mayo de 2008 12:09
  •  

    Tambien debes agregar la referencia al ensamblado System.Configuration

     

    En el Explorador de soluciones: Click derecho, Referencias, Agregar Referencia y la seleccionas en la pestaña .net.

     

    El machine.config lo puedes utilizar cuando son varias aplicaciones en el equipo las que van a utilizar la configuracion (en este caso cadena de coneccion, pero tambien podria ser un proveedor, o algo asi), esa cadena de conección, de esta forma agregas ó modificas la cadena en un solo archivo y no en varios. Si solo es una aplicacion es mejor que utilices el app.config o web.config.

    martes, 6 de mayo de 2008 1:24
  • Gracias a los dos por responderme...  tenía otra visión de lo que era el machine.config...

    Aún así el ConfigurationManager no podía usarlo... y le incluia el namespace System.Configuration a la clase... Voy a probar ahora... a ver ke tal
    martes, 6 de mayo de 2008 7:28