¿Cómo leer y escribir parámetros de configuración en C#?

Toda aplicación que se respete debe incluir algún modo de persistir su configuración de una ejecución a la otra.  Aún si esto no fuera necesario, es buena práctica no codificar dentro de la aplicación los valores que utilizará por defecto, o parámetros que cambian de una máquina a otra, por ejemplo, las cadenas de conexión a las bases de datos.  En C# esto es super sencillo de lograr a partir de:

  1. Archivos de configuración estilo XML: en aplicaciones web se nombran “web.config” y en desktop “app.config”.  En general, contienen un conjunto de pares parámetro-valor.
  2. Un grupo de funciones suministradas por el namespace System.Configuration.

Ejemplo de archivo de configuración:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings file="">
    <clear />
    <add key="miParametro" value="Mi valor" />
  </appSettings>
</configuration>

Paso a paso:

  • Añadir al proyecto una referencia a “System.Configuration” (Project -> Add Reference …).
  • Añadir al código:  “using System.Configuration”.
  • Para leer un parámetro de configuración:
string miValor = ConfigurationManager.AppSettings["miParametro"];
  • Para añadir un parámetro nuevo al archivo de configuración:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Add("miParametro", "Mi valor");
config.Save(ConfigurationSaveMode.Modified);
  • Para modificar y persistir un parámetro de configuración:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["miParametro"].Value = "Mi valor";
config.Save(ConfigurationSaveMode.Modified);

Nota: en las operaciones de escritura (añadir y modificar) desde Visual Studio, el instinto nos lleva inmediatamente a revisar los cambios en el archivo original “app.config” (asumiendo aplicación desktop).  Este contiene los parámetros iniciales de configuración; el archivo que se modifica realmente es nombre_de_app.exe.Config que está en la carpeta bin\Debug que es el archivo real de configuración cuando se distribuye la aplicación.

Aquí he mostrado el método de trabajo más sencillo con configuraciones en .NET.  Los archivos de configuración pueden llegar a ser muy sofisticados permitiendo la categorización de los parámetros en secciones, por ejemplo <connectionStrings> para las cadenas de conexión a bases de datos.  Realmente, los ejemplos anteriores operan sobre los parámetros correspondientes a una sección específica <appSettings>, lo cual es suficiente para una gran mayoría de las aplicaciones prácticas.

Existe vida …

… después del mouse y el teclado???

ReportViewer y fuentes de datos dinámicas

Durante las últimas semanas he estado enfrascado en labores de mantenimiento de aplicaciones un poco “viejitas” y entre las tareas está la incorporación de algunos requerimientos hechos por los usuarios de modificaciones a los informes, creación de nuevos, etc.  Por los días en que fueron programadas originalmente, solía usar componentes de terceros para la creación de informes, los cuales resultaron muy eficaces y aún hoy están sirviendo informes felizmente.  Sin embargo no siempre se obtiene ciento por ciento de compatibilidad con las versiones nuevas de .NET; así las cosas, decidí echar una ojeada a ReportViewer que viene incluído con Visual Studio 2008.  A primera vista me pareció un poco frívolo, con pocas posibilidades de personalización, gracias a la manía de Microsoft de ponernos las cosas estúpidamente simples; con el asistente y unos cuantos clicks, es posible en menos de un minuto obtener una forma de Windows o una página web que muestre un informe completamente funcional, eso sí, monolíticamente ligado a una tabla específica o expresión SQL.  A continuación intentaré mostrar cómo utilizar ReportViewer para mostrar informes a partir de fuentes de datos creadas dinámicamente en tiempo de ejecución. Leer más de esta entrada