Está en la página 1de 16

Share

More

Next Blog

Create Blog

Sign In

Leandro Tuttini Blog


domingo, 31 de julio de 2011

Archivos de Configuracin - Una introduccin (1/3)

Free Online Database Apps


zoho.com/creator/online-dat Create database apps in minutes. Just Drag-&-drop. Try NOW!

Introduccin Es muy comn tener que definir parmetros en las aplicaciones que se desarrollan proporcionando cierta configuracin que si bien se podra considerar casi esttica (porque no cambia constantemente), si sea necesario prever la posibilidad de adaptacin. Un ejemplo muy claro de estos es la cadena de conexin a la base de datos, por lo general una vez instalada la aplicacin no cambia, pero cuando se esta en la etapa de implementacin seguramente sea necesario su adaptacin al entorno. Por lo general se busca que sea un lugar que impacte lo menos posible en el desarrollo, algunos tienden a crear una clase y colocar constantes o variables readonly dentro del propio cdigo, pero el problema con esto es que requieren recompilar por completo el desarrollo, adems de tener que actualizar cada cliente por un simple cambio de configuracin. Tambin se busca un lugar estndar y conocido, algunos usan la registry de windows para definir configuracin, quizs era una opcin se algo mas viable cuando se contaba con Win XP, pero con Sistemas Operativos como
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

Archivo del blog 2013 (11) 2012 (24) 2011 (23) noviembre (2) octubre (1) septiembre (2)
pdfcrowd.com

viable cuando se contaba con Win XP, pero con Sistemas Operativos como ser Vista o Win 7 esto cambio bastante, el modelo de seguridad que estos imponen aplica restricciones a estas acciones, no haciendo tan cmoda la escritura en este sitio. Entonces porque no usar la propuesta que hace .net al respecto, si se trata de los archivos de configuracin, entre las ventajas que este presenta se pueden encontrar: una lectura simple, ya que se basa en xml fcil acceso y modificacin (se puede editar con el notepad), por lo general este archivo se encuentra junto a la aplicacin por lo que la seguridad debera permitir la escritura en esta carpeta Entre los temas que se trataran en este articulo 1- Agregar un archivo de configuracin a nuestro proyecto 2- Definir una seccin key-value 2a- usando la seccin appSettings 2b- definiendo una seccin propia

agosto (1) julio (4) Archivos de Configuracin Creando secciones prop... Archivos de Configuracin Una introduccin (1/3)... [Winforms] Singleton Pasar datos entre formulari... [WinForm] Listar Archivos del Directorio seleccion... junio (4) mayo (2) abril (2)

1- Agregar un archivo de configuracin a nuestro proyecto Si bien es una accin sencilla, si recin se esta introduciendo en el desarrollo, puede que no resulte tan intuitivo encontrar los pasos para agregar un archivo de configuracin. Estando sobre el proyecto en el Solution Explorer, se acciona el men que aparece con el boton derecho del mouse, seleccionado el menu Add > New Item

marzo (2) febrero (3) 2010 (55) 2009 (22) 2008 (1)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Datos personales

LE A ND R O TUTTI NI

Ver todo mi perfil Microsoft MVP C# 2010 2012

Etiquetas ADO.NET (12) en el recuadro se seleccionara la opcin: ASP.NET (35) C# (34)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

C# (34) Crystal Reports (5) DataGridView (13) Dynamic CRM (5) GridView (12) JavaScript (1) jQuery (13) Linq (6) MS Access (2) N-Tier (6) NHibernate (1) Office (1) Reporting Service (2) Esto agregar un archivo de nombre App.config, que en una primer instancia tendr solo un tag. Empecemos por una tarea simple, la lectura de una cadena de conexin. Para lograr esta tarea se necesitara la ayuda de una clase en particular, me refiero al ConfigurationManager con esta clase tendremos acceso a los tag de informacin definidos, pero para hacer uso de la misma se requiere hacer referencia a la librera System.Configuration, los pasos para esta accin serian representados en la siguiente imagen:
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

VB.NET (5) Visual Studio (3) WinForm (35) Seguidores Participar en este sitio
Google Friend Connect

Miembros (401) Ms

pdfcrowd.com

Ya eres miembro? Iniciar sesin

Solo queda agregar el cdigo que tomara la informacin del archivo de configuracin, usndolo luego con los objetos de ado.net para conectarse

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

En el punto 1 se define el using a la librera referenciada en el paso anterior (definiendo as su namespace), mientras que en el 2 se hace uso de la clase ConfigurationManager para tomar la cadena de conexin. Por supuesto en el archivo de configuracin se debi agregar la key que se define en el .config 1. <?xml version="1.0" encoding="utf-8" ?> 2. <configuration> 3. <connectionStrings> 4. <add name="default" connectionString="Data Source=LecturaConnectionString\TestDb.sdf;Persist
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Source=LecturaConnectionString\TestDb.sdf;Persist Security Info=False;"/> 5. </connectionStrings> 6. </configuration> 2- Definir una seccin key-value Definir informacin del tipo key-value en el archivo de configuracin puede realizarse de varias formas usando la seccin appsetting por medio de una seccion custom creada por uno

2a- Usando AppSetting Esta es la forma ms simple y directa de definir valores simples en la configuracin, solo basta con ingresar en la seccin <appSettings> el tag add con cada item que se requiera. En el ejemplo se observar la seccin definida como: 1. <appSettings> 2. <add key="1" value="Efectivo" /> 3. <add key="2" value="Tarjeta Credito" /> 4. <add key="3" value="Tarjeta Debito" /> 5. <add key="4" value="Cheque" /> 6. <add key="5" value="Transferencia Bancaria" /> 7. </appSettings> En el cdigo, en el Form2, se trabaja con esta informacin con al ayuda de linq para cargar un combo 01. private void Form2_Load(object sender, EventArgs e) 02. { 03. 04. 05. var result = (from configKey in ConfigurationManager.AppSettings.Keys.Cast<string
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. 18. }

ConfigurationManager.AppSettings.Keys.Cast<string >() let configValue = ConfigurationManager.AppSettings[co nfigKey] select new { key = configKey, value = configValue }).ToList(); cmbMediosPago.DisplayMember = "value"; cmbMediosPago.ValueMember = "key"; cmbMediosPago.DataSource = result;

Acceder a un tem en concreto es tan simple como usar ConfigurationManager.AppSettings[key]

1. private void cmbMediosPago_SelectionChangeCommitted(object sender, EventArgs e) 2. { 3. string key = Convert.ToString(cmbMediosPago.SelectedValue); 4. string value = ConfigurationManager.AppSettings[key]; 5. 6. lblSeleccion.Text = string.Format("Se ha seleccionado\n Key:{0} \n Value:{1}", key, value); 7. } 2b- Definiendo una seccin propia El uso de la seccin <appSettings> en algunas circunstancia puede
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

El uso de la seccin <appSettings> en algunas circunstancia puede resultar demasiado genrico y no brindar un lugar que sea claramente identificable para el negocio que se esta programando, esta seccin al ser tan comn se puede llenar rpidamente de items key-value no relacionados, haciendo difcil el mantenimiento. Pero existe una alternativa a este problema y consiste en crear una seccin propia para conserva estos pares key-value de forma personalizada, otorgando una visibilidad con sentido para la aplicacin En el cdigo del Form3 se implementa la solucin usando una seccin definida por uno mismo, la cual aplica el mismo concepto key-value. 01. <configuration> 02. <configSections> 03. <section name="MediosPago" type="System.Configuration.DictionarySectionHandl er" /> 04. </configSections> 05. 06. 07. <MediosPago> 08. <add key="1" value="Efectivo" /> 09. <add key="2" value="Tarjeta Credito" /> 10. <add key="3" value="Tarjeta Debito" /> 11. <add key="4" value="Cheque" /> 12. <add key="5" value="Transferencia Bancaria" /> 13. </MediosPago> 14. 15. </configuration> Para recuperar la informacin y listarla 01. private void Form3_Load(object sender, EventArgs e) 02. { 03. 04. var result = (from config in ((Hashtable)ConfigurationManager.GetSection("Medi osPago")).Cast<DictionaryEntry>() 05. select new
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 15. 16. 17. }

select new { key = config.Key, value = config.Value }).ToList(); cmbMediosPago.DisplayMember = "value"; cmbMediosPago.ValueMember = "key"; cmbMediosPago.DataSource = result; cmbMediosPago.SelectedIndex = -1;

Obtener un tem basndonos en la key requiere recuperar la seccin completa para luego si acceder al valor 1. private void cmbMediosPago_SelectionChangeCommitted(object sender, EventArgs e) 2. { 3. string key = Convert.ToString(cmbMediosPago.SelectedValue); 4. string value = ((Hashtable)ConfigurationManager.GetSection("Medi osPago"))[key].ToString(); 5. 6. lblSeleccion.Text = string.Format("Se ha seleccionado\n Key:{0} \n Value:{1}", key, value); 7. } Por supuesto tanto en estos ejemplo hacer uso de las clase de configuracin para tomar el valor del tem seleccionado, no tiene un sentido practico, ya que el propio combobox proporciona ambos datos key y value (usando el SelectedValue y SelectedText), solo se realiza con fines ilustrativos para poder aplicar los conceptos de programacin con el archivo de configuracin.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Cdigo de ejemplo [C#] [VB.NET]

Publicado por Leandro Tuttini en 14:43 Etiquetas: C #

11 comentarios: Ulises dijo... Hola Leandro, primero que nada agradecerte tu gran trabajo, he aprendido muchsimo gracias a tus artculos. Ahora solo para molestarte si pudieras arreglar las ligas de las imgenes... Este tema me interesa mucho y como que si faltan las imgenes para saber de que estas hablando. Salu2
7 de se ptie m bre de 2011 18:13

Leandro Tuttini dijo... hola Ulises espero lo mas pronto que pueda solucionar el problema que tengo con el hosting mientras tanto si necesitas ver las las imagenes y archivos
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

mientras tanto si necesitas ver las las imagenes y archivos reemplaza el dominio ltuttini.com.ar por http://200.58.122.109/ltuttini.com.ar por ejemplo, una de las imagenes dice: http://www.ltuttini.com.ar/blogfiles/WinForms/ConfigSeccionesPropi as/Parte1/imagen1.jpg con el cambio quedaria: http://200.58.122.109/ltuttini.com.ar/blogfiles/WinForms/ConfigSec cionesPropias/Parte1/imagen1.jpg este problema es temporal, por eso no actualizo el articulo saludos
7 de se ptie m bre de 2011 22:20

Ulises dijo... Mil gracias!! ahora si ya entend todo :-D


8 de se ptie m bre de 2011 08:39

Unknown dijo... Saludos leandro, es muy buena la utilidad de este proceso, pero al momento de ejecutar la aplicacin y cambiar los valores de la configuracin, no carga los valores actualizado, a que se debera?
4 de se ptie m bre de 2012 11:13

Leandro Tuttini dijo... hola Unknown


open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

no se si entendi del todo al cambiar los valores en que momento ? porque si es desde codigo recuerda que debes realizar un Refresh de la seccion de configuracion para que la tome saludos
5 de se ptie m bre de 2012 05:06

Josengan dijo... Hola Leandro me intereso ese ejemplo. Pero tengo una duda si utilizo ya sea el appsetting o conexion string se puede modificar cuando la aplicacion se este ejecutando? He podido modificarlo pero me obliga a salir y volver a entrar al sistema para que se refleje el cambio. Saludos
20 de novie m bre de 2012 12:51

Leandro Tuttini dijo... hola Josengan por lo general no se recomiendo cambiar informacion de configuracion mientras la aplciacion se ejecuta pero si tienes un .exe ejecutandose y editas el .config al realziar la lectura con el ConfigurationManager deberia tomar el cambio sino habria que evaluar de usar ConfigurationManager.RefreshSection saludos
20 de novie m bre de 2012 22:58

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

GABRIEL VILLACIS dijo... Hola Leandro, por favor ayudame: Realiz un proyecto en 3 capas, siguiendo tambien tu tutorial e inclui un archivo app.config para los connectionstring, me funciona a la perfeccion.. Ahora necesito tener un instalador de la aplicacion, y surge el siguiente problema: Estoy utilizando visual studio para hacer este instalador: arrastro el hasta el proyecto de instalacion archivo.exe(ejecutable) de mi proyecto y este como esta referenciado por defecto me carga las dll de las capas de datos y negocio... pero el archivo app.config no se agrega automaticamente, yo lo agrego como un archivo.... compilo el proyecto de instalacion, instalo mi aplicacion sobre el Sistema Operativo, al momento de ejecutar la aplicacion desde el SO como un programa independiente no se lee el app.config.... Estoy utilizando .Net Framework 4. Insisto mientras estoy desarrollando, la utilizacion del .config va de maravilla, pero cuando llega la hora de instalar la aplicacion llega el problema... Como resuelvo esto..??? Muchas gracias... Espero tu pronta respuesta....
5 de m arzo de 2013 22:06

Leandro Tuttini dijo... hola GABRIEL el tema es que si lo arrastras como archivo este toma el nombre de App.config, cuando deberia tomar el NombreAplicacion.exe.config
open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

o sea se renombra, esto lo puedes validar en el bin\Debug lo raro es que en el instalador no incluya de forma automatico el config, hasta donde se deberia incluirlo dentro de la opcion de primary output saludos
6 de m arzo de 2013 05:30

Valex dijo... Hola Leandro, disculpa, tengo la necesidad de hacer exactamente lo mismo pero en asp.net con visual estoy utilizando visual studio 2010 y esque quiero optimizar mi codigo porque cada webform tengo una cadena de conexin me podrias recomendar como configurarlo para tnerlo ubicado en un solo lado .. de ante mano muchas gracias
17 de m ayo de 2013 06:56

Leandro Tuttini dijo... hola Valex aplica de la misma forma, el ConfigurationManager lo puedes usar tambien en un entorno web quizas la diferencia este en el uso del web.config en lugar del app.config saludos
18 de m ayo de 2013 19:28

Publicar un comentario en la entrada


open in browser PRO version
Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Entrada ms reciente

Pgina principal

Entrada antigua

Suscribirse a: Enviar comentarios (Atom)

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

También podría gustarte