Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Como cambiar la caena de conexion de My.Settings

1,019 views
Skip to first unread message

SergioT

unread,
Jul 3, 2007, 12:38:55 PM7/3/07
to
Hola

tengo un proyecto web uno  BLL y otro DAL ( las 3 capas) en el DAL tengo los DS tipados que contienen tableAdapters
entonces al crear los tableAdapters se creó una cadena de conexion que se guardó en app.config. Hasta ahi  todo Bien,
Resulta que para implementar necesito que la cadena  sea cambiada  pero no quiero cambiar el app.config, recompilar e implementar
necesito una solucion de forma que pueda reamplazar dinamicamente la cadena que está en el file de confighuracion

En un link de febrero vi que se daba como solucion solapar la configuracion  en un evento MyProject de ahi hice lo sioguiente:

Namespace My

    Partial Friend NotInheritable Class MySettings
    Private Sub MySettings_SettingsLoaded(ByVal sender As Object, ByVal e As System._
                                                                    Configuration.SettingsLoadedEventArgs)  Handles   Me.SettingsLoaded
                Dim sCnn As String = "", sCnnSeg As String = ""
                clsCnn.GetCadenaDeFile(sCnn, sCnnSeg)

                My.Settings.Cnn = sCnn
                My.Settings.CnnSeg = sCnnSeg
    End Sub
End Class
End Namespace
 
Coimo ven tengo una clase que abre un archivo texto recuperando la cadena en dos variable que supuestamente solaparan a la del My.Settings, pero la vaina  es que las propiedades del My.Setting son readonly!!!! y esto creo que no se puede cambiar :(  alguna idea de como puedo solapar la cadena?? al crear la cadena desde la pantalla de MyProject define automaticamente a las cadenas de conexion como Tipo=aplicacion y por tanto readonly :(
 
No quiero usar el webconfig por que esta en otra capa de mi aplicacion y no me parece que la capa de presenteacion le diga a la de datos como recuperar su informacion
 
 
Gracias
Salu2
 

carlosmsr

unread,
Jul 3, 2007, 1:40:02 PM7/3/07
to
el archivo de configuración de la aplicación (MyApp.exe.config o web.config)
no se compila. las aplicaciones ASP .NET detectan los cambios de
configuración automaticamente y con solo reiniciar las aplicaciones Winforms
es suficiente para que obtenga la nueva cadena de conexión.

Juan T. Llibre

unread,
Jul 3, 2007, 2:31:53 PM7/3/07
to
My.Settings no aplica a aplicaciones Web.
Solo a aplicaciones

Mira una gráfica que indica cuales tipos de proyecto aplican para cada objeto My:
http://msdn2.microsoft.com/es-es/library/ms172698(VS.80).aspx


Juan T. Llibre, asp.net MVP
asp.net faq : http://asp.net.do/faq/
foros de asp.net, en español : http://asp.net.do/foros/
======================================

"SergioT" <stardi...@gmail.om> wrote in message news:%23a%23V4CZv...@TK2MSFTNGP05.phx.gbl...

Jose A. Fernandez

unread,
Jul 3, 2007, 2:49:38 PM7/3/07
to
Hola SergioT
Tu inquitud es algo que casi todo el mundo pregunta... Te comento como
lo hago yo.
Para no estar "trabajando tanto" cambiando la cadena cada vez que
necesitamos estas los archivos de configuración.. si estas en una web
es web.confg si es un aplicación es app.config, pero como hacemos para
que nuestra componenten DAL (como en tu caso) detecte??... Bueno viene
a nuestra ayuda
System.Configuration.ConfigurationManager.ConnectionStrings

O sea en tu DAL tendras esto:

Imports System.Configuration


Namespace My
Partial Friend NotInheritable Class MySettings
Private Sub MySettings_SettingsLoaded(ByVal sender As Object,

ByVal e As System.Configuration.SettingsLoadedEventArgs) Handles
Me.SettingsLoaded
Me.EMPRESAConnectionString =
ConfigurationManager.ConnectionStrings("EMPRESAConnectionString").ConnectionString


End Sub
End Class
End Namespace

Osea cuando creaste tus dataset tipados (datatables) seguro que
ndicaste que el ConnectionString se guarde con un valor de defecto
para realizar los test, pero en este caso estamo indicando que cuando
cargue la configuracion vaya a buscar en nuestro archivo de
configuración (esto se encarga el ConfigurationManager)...
Entonces solo copia en la carpeta Bin tu componente que solo sabra el
ConnectionString utilizado default en tu aplicacion (siempre toma el
primero ok, por si tienes una lista de varios ConnectionStrings)

NOTA: Debes hacer referencia en tu componente DAL a assembly
System.Configuration
NOTA2: Tambien hay que modificar la propiedad que es de solo lectura
del ConnectionString... (quita el ReadOnly y pon el Set)

Enlaces:
------------------
ConfigurationManager (Clase) (nuevo en asp.net 2.0)
Proporciona acceso a los archivos de configuración para las
aplicaciones cliente. Esta clase no se puede heredar.
http://msdn2.microsoft.com/es-es/library/system.configuration.configurationmanager(VS.80).aspx

_____________________
Jose A. Fernandez
blog: http://geeks.ms/blogs/fernandezja

Aqui estamos

On 3 jul, 15:31, "Juan T. Llibre" <nomailrepl...@nowhere.com> wrote:
> My.Settings no aplica a aplicaciones Web.
> Solo a aplicaciones
>
> Mira una gráfica que indica cuales tipos de proyecto aplican para cada objeto My:http://msdn2.microsoft.com/es-es/library/ms172698(VS.80).aspx
>
> Juan T. Llibre, asp.net MVP
> asp.net faq :http://asp.net.do/faq/
> foros de asp.net, en español :http://asp.net.do/foros/
> ======================================
>

> "SergioT" <stardionos...@gmail.om> wrote in messagenews:%23a%23V4CZv...@TK2MSFTNGP05.phx.gbl...

SergioT

unread,
Jul 3, 2007, 3:45:29 PM7/3/07
to
Hola José
 
Haber creo que me quedan estas dudas:
 
  1. Para que necesito leer con ConfigurationManager.ConnectionStrings("EMPRESAConnectionString").ConnectionString
    tomando en cuenta que yo tengo la cadena en un archivo texto el cual es leido e interptrado por la funcion clsCnn.GetCadenaDeFile(sCnn, sCnnSeg). Ademas yo manejo 2 bases de datos una de datos de la aplicacion y otra para el control de accesos auditoria y seguridad  del sistema por tanto tengo 2 cadenas de conexion guardadas 
  2. O la idea es que coloque el archivo app.config en el directorio bin ?? para que pueda ser leido por ConfigurationManager ?? eso no entiendo
  3. He modificado las propiedades para que no sean readonly en el archivo creado por el diseñador settings.designer.vb supongo que los ambios no se destruirá ya que es un archivo creado por el vs. Me quedaron asi:
  4. Public Property Cnn() As String
    Get
    Return CType(Me("Cnn"), String)
    End Get

    Set(ByVal value As String)
    Me("Cnn") = value
    End Set

    End Property
Bueno josé esas son mis dudas, muchas gracias por la ayuda espero me puedas terminar de aclarar la figura
 
gracias
Salu2
Sergio
 
"Jose A. Fernandez" <ferna...@gmail.com> escribió en el mensaje news:1183488578.8...@k79g2000hse.googlegroups.com...

Jose A. Fernandez

unread,
Jul 7, 2007, 1:52:57 PM7/7/07
to
Hola SergioT
(estoy contestando por pedido tu pedido expreso jeje, ya que se me
paso esta respuesta, se ve que la vi y luego se me coloco como leida y
allí ya perdi el rastro, mil perdones.... quedo a la mitad)

1) SERGIOT: Para que necesito leer con
ConfigurationManager.ConnectionStrings

Bueno lo que estas haciendo aqui
clsCnn.GetCadenaDeFile(sCnn, sCnnSeg)
Es algo que hicimos todos antes de conocer que ya teniamos algo
integrado para leer configuraciones, desde los archivo de
configuraciones del asp.net (web.config) en tu caso es una web
O sea no necesitas crear archivos con formatos propios (por ejemplo
archivos txt, ini, cfg personales) tenemos a nuestra disposicion los
archivos de configuracion y asi obtner info desde ellos (sin importar
el amabiente, o sea si es una appweb leera de web.config si es una
appwin leera de app.config
Simplemente colocando
My.Settings.CnnSeg =
ConfigurationManager.ConnectionStrings("EMPRESAConnectionString").ConnectionString

Ahora bien, si quieres mantener un archivo separado para las
candenas de conexion puedes en el web.config agregar la propiedad
configSource, que indica el nombre del archivo donde esta esta
configuracion, quedaria algo asi:
<connectionStrings configSource="Web.ConnectionStrings.config" />

Asi quedaria Web.ConnectionStrings.config
<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
<add name="EJEMPLO1ConnectionString" connectionString="Data
Source=.;Initial Catalog=EJEMPLO;Persist Security Info=True;User
ID=example;Password=example" providerName="System.Data.SqlClient" />
<add name="ADMINConnectionString" connectionString="Data
Source=.;Initial Catalog=EJEMPLO;Persist Security Info=True;User
ID=example;Password=example" providerName="System.Data.SqlClient" />
</connectionStrings>


Sintesis, puedes realizar como lo vienes haciendo (solo que un poco
mas "artesanal" de mantener tus archivos de configuracion" y aqui se
integra a los archivos de configracion de las aplicaciones de .net
Puedes separar el archivo de cadenas de conexxion, para sacarlo del
web.config (propiedad configSource)


2) SERGIOT: La idea es que coloque el archivo app.config en el


directorio bin ?? para que pueda ser leido por ConfigurationManager ??
eso no entiendo

Algo del punto 1, la idea que tu componente que necesita accesar a
la cadena de configuracion no necesite conocer el archivo si es web o
win (para leer de app.config, o web.config) sino simplemente de un
archivo de configuracion. .NET sabe cual es este archivo dependiendo
de donde estas (si es un appweb, sabe donde buscar el archivo de
configuracion correcto)


3) SERGIOT: He modificado las propiedades para que no sean readonly en


el archivo creado por el diseñador settings.designer.vb supongo que
los ambios no se destruirá ya que es un archivo creado por el vs. Me
quedaron asi

Tendras que hacerlo asi, que se pueda "setear" para que sea
modificado en tiempo de ejecucion.


Espero que te sirva de ayuda o guia
______________________


Jose A. Fernandez
blog: http://geeks.ms/blogs/fernandezja

On 3 jul, 16:45, "SergioT" <stardionos...@gmail.om> wrote:
> Hola José
>
> Haber creo que me quedan estas dudas:
>

> 1.. Para que necesito leer con ConfigurationManager.ConnectionStrings("EMPRESAConnectionString").ConnectionString


> tomando en cuenta que yo tengo la cadena en un archivo texto el cual es leido e interptrado por la funcion clsCnn.GetCadenaDeFile(sCnn, sCnnSeg). Ademas yo manejo 2 bases de datos una de datos de la aplicacion y otra para el control de accesos auditoria y seguridad del sistema por tanto tengo 2 cadenas de conexion guardadas

> 2.. O la idea es que coloque el archivo app.config en el directorio bin ?? para que pueda ser leido por ConfigurationManager ?? eso no entiendo
> 3.. He modificado las propiedades para que no sean readonly en el archivo creado por el diseñador settings.designer.vb supongo que los ambios no se destruirá ya que es un archivo creado por el vs. Me quedaron asi:
> 4.. Public Property Cnn() As String


> Get
> Return CType(Me("Cnn"), String)
> End Get
>
> Set(ByVal value As String)
> Me("Cnn") = value
> End Set
>
> End Property
>
> Bueno josé esas son mis dudas, muchas gracias por la ayuda espero me puedas terminar de aclarar la figura
>
> gracias
> Salu2
> Sergio
>

> "Jose A. Fernandez" <fernande...@gmail.com> escribió en el mensajenews:1183488578.8...@k79g2000hse.googlegroups.com...

> aplicaciones cliente. Esta clase no se puede heredar.http://msdn2.microsoft.com/es-es/library/system.configuration.configu...

0 new messages