Escribiendo .exe.Config

14/11/2006 - 23:08 por Richard Vasquez C. | Informe spam
Amigos me encuentro en serios apuros, les comento... armo la cadena de
conexion en tiempo de ejecucion que la escribo como valor de la etiqueta del
connectionString que inicialemnet esta en Blanco, la escritura se realiza
sin problemas pero la siguiente linea de mi codigo es la de conecion mediate
DAAB la cual lee del .exe.config de la aplicacion, y alli me sale un error
indicandome que el valor del connectionString no puede ser nula o vacia,
cuando verifico el XML veo que si se escribio la cadena correctamente,
cuando realizo el mismo procedimeitno pero espero un poco despues de
escribir el xml con la cadena de coneccion recien conecta. entiendo por ello
que creo que la escritura lo hace pero el sistema operativo no lo actualiza
porque tengo que esperar unos 15 segundo para que lo reconosca
normalmente
Espero que me hayan entendido...mi pregunta resumiendo todo es como puedo
hacer mediante codigo que se actualicen los archivos de un determinado
directorio como si lo haria con F5 desde el Explorador de Windows.

Este es el codigo que utilizo para la escritura del .exe.config

Private Sub EscribeXML(ByVal CadenaConexion As String)

Dim docName As String = String.Empty

docName = ((Assembly.GetEntryAssembly()).GetName()).Name

docName += ".exe.config"

Dim doc As New XmlDocument

Dim node As XmlNode = Nothing

Dim appCfg As New cAppConfig

appCfg.ConfigType = Convert.ToInt32(ConfigFileType.AppConfig)

appCfg.loadConfigDoc(doc)

node = doc.SelectSingleNode("//connectionStrings")

Dim Key As String = "cnn_sigcli_temp"

Dim addElem As XmlElement = CType(node.SelectSingleNode("//add[@name='" +
Key + "']"), XmlElement)

'MessageBox.Show(addElem.GetAttribute("connectionString"), "Antes")

addElem.SetAttribute("connectionString", CadenaConexion)

Call saveConfigDoc(doc, docName)

Variables.vgConexion = Key

End Sub

Private Sub saveConfigDoc(ByVal cfgDoc As XmlDocument, ByVal cfgDocPath As
String)

Try

'Dim Fsw As New FileSystemWatcher(cfgDocPath)

Dim writer As XmlTextWriter = New XmlTextWriter(cfgDocPath, Nothing)

writer.Formatting = Formatting.Indented

cfgDoc.WriteTo(writer)

writer.Flush()

writer.Close()

Return

Catch

Throw

End Try

End Sub



Para formar la cadena de conexion es la siguiente.

Private Sub cmbEmpresa_SelectedIndexChanged(ByVal sender As Object, ByVal e
As System.EventArgs) Handles cmbEmpresa.SelectedIndexChanged

Try

If Me.cmbEmpresa.SelectedIndex <> -1 Then

Dim drvEmpresa As DataRowView

drvEmpresa = CType(Me.cmbEmpresa.DataSource,
DataView).Item(Me.cmbEmpresa.SelectedIndex)

Dim CnString As String = "Data Source=" & drvEmpresa("SG_Data_Source") &
";Initial Catalog=" & drvEmpresa("SG_Database") & ";User ID=" &
drvEmpresa("SG_User") & ";Password=" & drvEmpresa("SG_Clave") & ";"

Call EscribeXML(CnString)

End If

Catch Qex As Exception

MessageBox.Show(Qex.Message, "Seguridad del Sistema - Filtro Combo",
MessageBoxButtons.OK, MessageBoxIcon.Error)

End Try

End Sub



Y para Inicializar el sistema y conectarme para jalar mis acceso de usuario:



Dim vMyBaseDatos As Database = DatabaseFactory.CreateDatabase(vgConexion)

Dim ddAcceso As SqlDataReader =
vMyBaseDatos.ExecuteReader("Seguridad.USP_ACCESO_USER", 0, vlUser, Nothing,
Nothing, Nothing)

.



Espero me ayuden.
 

Leer las respuestas

#1 Lord Voldemort
15/11/2006 - 22:19 | Informe spam
no se... usa mejor My.Setting
busca en las propiedades del proyecto... la pestaña de setting, ahi creas
las variables para mantener estos datos..
de ahi solo dices..
strStringConn = My.Setting("TuSetting")

y para setearla
My.Setting("TuSetting") = strTuNuevaConexion..

saludos




"Richard Vasquez C." escribió en el mensaje
news:%
Amigos me encuentro en serios apuros, les comento... armo la cadena de
conexion en tiempo de ejecucion que la escribo como valor de la etiqueta
del connectionString que inicialemnet esta en Blanco, la escritura se
realiza sin problemas pero la siguiente linea de mi codigo es la de
conecion mediate DAAB la cual lee del .exe.config de la aplicacion, y alli
me sale un error indicandome que el valor del connectionString no puede
ser nula o vacia, cuando verifico el XML veo que si se escribio la cadena
correctamente, cuando realizo el mismo procedimeitno pero espero un poco
despues de escribir el xml con la cadena de coneccion recien conecta.
entiendo por ello que creo que la escritura lo hace pero el sistema
operativo no lo actualiza porque tengo que esperar unos 15 segundo para
que lo reconosca normalmente
Espero que me hayan entendido...mi pregunta resumiendo todo es como puedo
hacer mediante codigo que se actualicen los archivos de un determinado
directorio como si lo haria con F5 desde el Explorador de Windows.

Este es el codigo que utilizo para la escritura del .exe.config

Private Sub EscribeXML(ByVal CadenaConexion As String)

Dim docName As String = String.Empty

docName = ((Assembly.GetEntryAssembly()).GetName()).Name

docName += ".exe.config"

Dim doc As New XmlDocument

Dim node As XmlNode = Nothing

Dim appCfg As New cAppConfig

appCfg.ConfigType = Convert.ToInt32(ConfigFileType.AppConfig)

appCfg.loadConfigDoc(doc)

node = doc.SelectSingleNode("//connectionStrings")

Dim Key As String = "cnn_sigcli_temp"

Dim addElem As XmlElement = CType(node.SelectSingleNode("//add[@name='" +
Key + "']"), XmlElement)

'MessageBox.Show(addElem.GetAttribute("connectionString"), "Antes")

addElem.SetAttribute("connectionString", CadenaConexion)

Call saveConfigDoc(doc, docName)

Variables.vgConexion = Key

End Sub

Private Sub saveConfigDoc(ByVal cfgDoc As XmlDocument, ByVal cfgDocPath As
String)

Try

'Dim Fsw As New FileSystemWatcher(cfgDocPath)

Dim writer As XmlTextWriter = New XmlTextWriter(cfgDocPath, Nothing)

writer.Formatting = Formatting.Indented

cfgDoc.WriteTo(writer)

writer.Flush()

writer.Close()

Return

Catch

Throw

End Try

End Sub



Para formar la cadena de conexion es la siguiente.

Private Sub cmbEmpresa_SelectedIndexChanged(ByVal sender As Object, ByVal
e As System.EventArgs) Handles cmbEmpresa.SelectedIndexChanged

Try

If Me.cmbEmpresa.SelectedIndex <> -1 Then

Dim drvEmpresa As DataRowView

drvEmpresa = CType(Me.cmbEmpresa.DataSource,
DataView).Item(Me.cmbEmpresa.SelectedIndex)

Dim CnString As String = "Data Source=" & drvEmpresa("SG_Data_Source") &
";Initial Catalog=" & drvEmpresa("SG_Database") & ";User ID=" &
drvEmpresa("SG_User") & ";Password=" & drvEmpresa("SG_Clave") & ";"

Call EscribeXML(CnString)

End If

Catch Qex As Exception

MessageBox.Show(Qex.Message, "Seguridad del Sistema - Filtro Combo",
MessageBoxButtons.OK, MessageBoxIcon.Error)

End Try

End Sub



Y para Inicializar el sistema y conectarme para jalar mis acceso de
usuario:



Dim vMyBaseDatos As Database = DatabaseFactory.CreateDatabase(vgConexion)

Dim ddAcceso As SqlDataReader =
vMyBaseDatos.ExecuteReader("Seguridad.USP_ACCESO_USER", 0, vlUser,
Nothing, Nothing, Nothing)

.



Espero me ayuden.


Preguntas similares