SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => ASP .NET => Mensaje iniciado por: Javier Santamaria en Martes 22 de Mayo de 2007, 12:05

Título: Cambiar Connectionstring En Tiempo De Ejecucion
Publicado por: Javier Santamaria en Martes 22 de Mayo de 2007, 12:05
Hola, como estan?

A ver se me presenta la siguietne duda:

Como puedo cambiar las connection string de mi web.config en tiempo de ejecucion de mi aplicacion?

Gracias de antemano por vuestras respuestas
Título: Re: Cambiar Connectionstring En Tiempo De Ejecucion
Publicado por: Javier Santamaria en Jueves 24 de Mayo de 2007, 11:19
Hola, les dejo la solucion que me pasaron en otro foro por si les interesa:

Si mal no recuerdo, usar config = WebConfigurationManager.OpenWebConfiguration("~/web.config")
te da un archivo de solo lectura.

Para obtener un archivo al cual puedes escribir, usa
WebConfigurationManager.OpenWebConfiguration("~").

También, asegúrate de que la cuenta bajo la cual corre ASP.NET tiene
permisos de escritura sobre el archivo/directorio de la aplicación.

Pero, creo que estas escogiendo la manera mas difícil de hacer esto.

En vez de editar web.config directamente, yo guardara las conexiones
en un archivo externo, y sobreescribiría *ese* archivo.

Ejemplo :



En ese archivo incluyes las conexiones que quieras, igualito como si fuera web.config:



connectionString="bla, bla, bla"
providerName="System.Data.SqlClient" />


connectionString="bla, bla, bla"
providerName="System.Data.SqlClient" />


Ahora, con simplemente sobreescribir conexiones.config, tienes los cambios que quieras.

Hay una ventaja adicional al hacerlo así, y es que puedes asignar permisos de escritura por roles.

Por ejemplo, le das derecho de sobreescribir web.config al administrador del sistema,
pero el administrador de la base de datos podría editar conexiones.config.

Administrativamente, eso tiene mas sentido.

Nota: para poder habilitar que la Aplicacion reinicie automáticamente cuando
conexiones.config es modificado, tienes que hacer un cambio en el machine.config.

En , edita , agregándole

restartOnExternalChanges="true"

Quedará así :



...y listo.

Nota: el PublicKeyToken tuyo puede ser distinto al mío.
No hagas "cut-and-paste de esa parte. Solo de restartOnExternalChanges="true".

Ahora solo tienes que sobreescribir conexiones.config...y tus nuevas conexiones funcionarán inmediatamente.