lunes, 1 de febrero de 2010

Almacenamiento externo de cadenas de conexión

Cuando colocamos un objeto de conexión a un origen de datos sobre un formulario Windows Forms de Visual Studio .NET, éste aparece en la parte inferior del diseñador correspondiente y podemos editar sus propiedades desde la ventana de propiedades del entorno.

La propiedad más importante de este objeto es, sin duda, ConnectionString. Normalmente la ajustamos desde la propia ventana de propiedades, y mucha gente la deja simplemente ahí, sin añadir forma alguna de modificarla de forma externa a la aplicación. Esto tiene varios problemas, pero los principales son:

  • Si queremos actualizar la cadena deberemos cambiar la propiedad desde el diseñador y recompilar la aplicación


  • Si alguien rastrea o descompila el código puede leer en claro la cadena (con contraseñas de acceso y otra información confidencial).

    Para evitar el primero de estos problemas es obvio que lo más sencillo es llevar esta cadena de conexión (entera o por partes) a algún archivo externo de configuración que leeremos desde nuestro código para ajustar la cadena en tiempo de ejecución.

    Un truco interesante para obtener esta característica sin esfuerzo es el siguiente.

    En la ventana de propiedades del objeto Connection, aparte de la propiedad ConnectionString clásica, existe una propiedad dinámica con el mismo nombre (dentro de la sección DynamicProperties). Si editamos su valor aparece un diálogo que nos pregunta si queremos obtener la cadena de conexión desde un archivo externo. Al marcar esa opción el componente genera automáticamente el coódigo necesario en nuestro formulario para que en tiempo de ejecución ese valor se obtenga desde un archivo de configuración externo.



    El código automático se incluye dentro del método InitializeComponent del formulario, y tiene el siguiente aspecto (he incluido sólo el que se refiere a esta característica):

    System.Configuration.AppSettingsReader
    configurationAppSettings = new System.Configuration.AppSettingsReader();
    this.sqlConnection1 = new System.Data.SqlClient.SqlConnection();
    this.label1 = new System.Windows.Forms.Label();
    this.sqlConnection1.ConnectionString = ((string)(configurationAppSettings.GetValue("sqlConnection1.ConnectionString", typeof(string))));


    Como vemos se utiliza la clase AppSettingsReader, obteniéndose los datos de la conexión desde el archivo .config de la aplicación. Este archivo XML se generará de manera automática al compilar el programa e incluirá un nodo con el nombre especificado (en el ejemplo, sqlConnection1.ConnectionString) que podemos modificar para cambiar la cadena de conexión sin tener que recompilar. Esto es algo muy cómodo.

  • No hay comentarios:

    Publicar un comentario