none
Formulario para modificar la cadena de conexión guardada en My.settings en tiempo de ejecución

    Pregunta

  • Hola, tengo un formulario donde me busca el servidor y la bases de datos de ese servidor y un textbox donde me muestra la cadena de conexión apartir del servidor y la base de datos seleccionada, pero me gustaria que esa cadena de conexión que este hay se guarde en my.settings para que cuando el programa cargue sea con la nueva cadena de conexión. Muchas gracias y espero que puedan ayudarme. Suerte!

    Renzo Rivera

    domingo, 25 de diciembre de 2016 7:11

Respuestas

  • "Renzo19" preguntó:

    > tengo un formulario donde me busca el servidor y la bases de datos de ese
    > servidor y un textbox donde me muestra la cadena de conexión apartir del
    > servidor y la base de datos seleccionada, pero me gustaria que esa cadena
    > de conexión que este hay se guarde en my.settings para que cuando el
    > programa cargue sea con la nueva cadena de conexión.

    Hola:

    Tan solo tienes que referenciar la cadena de conexión existente en el archivo de configuración de tu aplicación y modificarla con los nuevos valores existentes en el formulario de búsqueda que comentas.

    Una vez que en tu proyecto de Visual Basic hayas referenciado el ensamblado System.Configuration.dll, procederías a ejecutar lo siguiente:

    Imports System.Configuration
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Mostramos el formulario para buscar el servidor y la base de datos
            '
            Dim cadenaConexion As String = String.Empty
    
            Using frm As New FormBusqueda()
                Dim dr As DialogResult = frm.ShowDialog()
                If (dr = DialogResult.Cancel) Then
                    ' Se ha cancelado el cuadro de diálogo;
                    ' abandonar el procedimiento
                    Return
                End If
    
                ' Obtenemos la cadena de conexión con el servidor
                ' y la base de datos que aparece en el control
                ' TextBox del formulario de búsqueda.
                '
                cadenaConexion = frm.TextBox1.Text
            End Using
    
            ' Abrimos el archivo de configuración de la aplicación
            Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
    
            ' Referenciamos la sección connectionStrings del archivo de configuración.
            Dim connectionStringsSection As ConnectionStringsSection =
                DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    
            ' Referenciamos la cadena de conexión que deseamos modificar.
            Dim settings As ConnectionStringSettings =
                connectionStringsSection.ConnectionStrings.Item("MiCadenaConexion")
    
            ' Modificamos el valor de la cadena de conexión con los
            ' valores recibidos del formulario:
            settings.ConnectionString = cadenaConexion
    
            ' Guardamos los cambios en el archivo de configuración de la aplicación.
            config.Save(ConfigurationSaveMode.Full, False)
    
        End Sub

    Obviamente, puedes insertar el código de referencia y modificación de la cadena de conexión en el propio formulario de búsqueda, de tal manera que cuando el usuario presione el botón "Aceptar", "Modificar" o como se llame el botón, ejecutes el código indicado para modificar la cadena de conexión en el propio archivo de configuración de la aplicación.

    Por último, te comento que no es necesario que reinicies tu aplicación para que los cambios tengan efecto; tal solo tienes que establecer una nueva conexión con la base de datos utilizando los valores modificados de la cadena de conexión existente en el archivo de configuración de la aplicación.

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo y ¡Feliz Navidad!


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    domingo, 25 de diciembre de 2016 8:29
    Moderador
  • "Renzo19" escribió:

    > ' Referenciamos la cadena de conexión que deseamos modificar.
    >  Dim settings As ConnectionStringSettings = connectionStringsSection.ConnectionStrings.Item(
    >           "Data Source=desktop-i7cuv6b\SQLEXPRESS;Initial Catalog=Gabriel;Integrated Security=True")
    >
    > ' Modificamos el valor de la cadena de conexión con los
    > ' valores recibidos del formulario:
    > settings.ConnectionString = cadenaConexion
    >
    > Cuando doy click a ese botón me sale la exeption "Referencia a objeto no no establecida
    > como instancia de un objeto"
    >
    > settings.ConnectionString = cadenaConexion (En esta parte marcada)

    Es normal que obtengas un error de "Referencia a objeto no establecida como instancia de un objeto", porque estás queriendo utilizar un objeto del tipo ConnectionStringSettings cuyo valor es Nothing. Si el valor es Nothing, ¿cómo pretendes utilizar el objeto, con independencia que éste sea del tipo ConnectionStringSettings, sea del tipo DataTable, del tipo SqlConnection o del tipo String? Lo que te tienes que preguntar es el motivo por el cual el objeto tiene el valor Nothing, y el motivo de ello no es más que el siguiente.

    Fíjate cómo estás referenciando la cadena de conexión que tienes en el archivo de configuración de tu aplicación:

    > ' Referenciamos la cadena de conexión que deseamos modificar.
    >  Dim settings As ConnectionStringSettings = connectionStringsSection.ConnectionStrings.Item("Data Source=desktop-i7cuv6b\SQLEXPRESS;Initial Catalog=Gabriel;Integrated Security=True")

    ¿Tu crees que ese es el nombre correcto de una cadena de conexión? Más bien diría que es la propia cadena de conexión que tienes escrita en tu App.config.

    Ahora fíjate cómo te indiqué en mi ejemplo la manera de referenciar una cadena de conexión por su nombre:

        ' Referenciamos la cadena de conexión que deseamos modificar.
        Dim settings As ConnectionStringSettings =
                connectionStringsSection.ConnectionStrings.Item("MiCadenaConexion")

    Es decir, se comprende que en la sección <connectionStrings> del archivo app.config existe una cadena de conexión con nombre llamada "MiCadenaConexion", la cual tiene la cadena de conexión que por defecto va a utilizar la aplicación:

      <connectionStrings>
    
        <add name="MiCadenaConexion" connectionString="Data Source=desktop-i7cuv6b\SQLEXPRESS;
                  Initial Catalog=Gabriel;Integrated Security=true" providerName="System.Data.SqlClient" />
    
      </connectionStrings>
    

    Pues así es como tienes que referenciar un objeto ConnectionStringSettings, mediante el nombre de la cadena de conexión, no con la cadena de conexión propiamente dicha. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Renzo19 lunes, 26 de diciembre de 2016 16:11
    lunes, 26 de diciembre de 2016 7:43
    Moderador
  • "Renzo19" escribió:

    > Gracias por responder pero sigo con el problema, ...

    ¿Con el mismo problema? ¿Con qué problema continuas? ¿Con modificar la cadena de conexión en el archivo NombreAplicacion.exe.config, con el error "Referencia a objeto no establecida como instancia de un objeto", o es que tienes otro problema diferente? ¿Con qué problema dices que sigues?

    > ... mira este es todo mi código del formulario de prueba, ya lo
    > modifique como decías incluso el app.onfig y ahora esta así :
    >

    Me imagino que habrá sido un error a la hora de escribir el mensaje, pero el archivo de configuración de la aplicación en tiempo de diseño se llama app.CONFIG, no "app.onfig". Y en tiempo de ejecución se transforma en NombreAplicacion.exe.config. ¿OK?

    > Hay esta completo si gustas has la prueba pegandolo en
    > un form aparte y asi vez el error.

    Pues siento desilusionarte, pero después de haberlo probado no encuentro ningún problema para modificar la cadena de conexión llamada "MiCadenaConexion" en el archivo de configuración llamado NombreAplicacion.exe.config, que es dónde se modifica la cadena de conexión en tiempo de ejecución, no en el archivo app.config.

    ¿No será esto último lo que te está ocurriendo? Que tu quieres modificar el archivo app.config y el que en realidad se modifica en TIEMPO DE EJECUCIÓN es el archivo NombreAplicacion.exe.config.

    Si estás ejecutando tu proyecto desde el IDE de Visual Studio, tienes que tener presente que cada vez que RECOMPILES el proyecto, se modificará el archivo NombreAplicacion.exe.config con los datos originales que existen en el archivo de configuración de la aplicación (app.config).

    Haz una prueba ejecutando directamente el archivo ejecutable de tu proyecto, aquel que se llame NombreAplicacion.exe. Y si a pesar de ejecutarlo continuas sin poder modificar la cadena de conexión en el archivo NombreAplicacion.exe.config, lo siento muchísimo pero no sé ya a qué se puede deber.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Renzo19 martes, 27 de diciembre de 2016 3:44
    lunes, 26 de diciembre de 2016 17:26
    Moderador
  • "Renzo19" escribió:

    > Es lo que necesito, un formulario en el que pueda insertar una ruta de acceso
    > al servidor y la base de datos con la cual se va a trabajar y que cuando
    > inserte dicha ruta se quede guardada, para que cuando cargue el programa tenga
    > esa ruta escrita de forma que solo sea darle a conectar y listo.

    Pero ¿no decías en tu primer mensaje que ya tenías un formulario para esa cuestión que deseas realizar?

    [Hola, tengo un formulario donde me busca el servidor y la bases de datos de ese servidor y un textbox donde me muestra la cadena de conexión a partir del servidor y la base de datos seleccionada, ...]

    Yo lo único que te pregunto es si conoces ya la manera de modificar en TIEMPO DE EJECUCIÓN una cadena de conexión con nombre almacenada en el archivo de configuración de la aplicación NombreAplicacion.exe.config.

    ¿Has probado a ejecutar directamente el archivo ejecutable de la aplicación? ¿Se ha modificado la cadena de conexión?


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Renzo19 martes, 27 de diciembre de 2016 3:44
    lunes, 26 de diciembre de 2016 18:29
    Moderador
  • "Renzo19" escribió:

    > Si tengo el formulario, me busca el servidor local y la base de datos y de acuerdo
    > a esos parámetros me genera una cadena de conexión el problema es que dicha cadena
    > no se guarda permanentemente ...

    Pero, ¡cómo no se van a guardar permanentemente los cambios efectuados! Discúlpame, pero ahora sí que no me entero de nada. :-((

    Si tu ejecutas ese código a iniciar tu aplicación, los cambios se guardarán PERMANENTEMENTE en el archivo llamado NombreAplicacion.exe.config que hayas DISTRIBUIDO junto con el archivo ejecutable de tu aplicación.

    ¿Qué archivo *.config estás distribuyendo? ¿El archivo app.config o el archivo NombreAplicacion.exe.config? Entiendo que estarás distribuyendo el archivo NombreAplicacion.exe.config. Perdóname que te lo pregunte, pero es que no puedo reproducir lo que nos estás comentando. :-(

    Y para probar todo, tienes que CERRAR VISUAL STUDIO (no es necesario, pero en éste caso vamos a hacer que lo sea), dirigirte a la carpeta donde tienes el archivo ejecutable de tu aplicación (C:\Carpeta\Bin\Debug), y ejecutar directamente el archivo NombreAplicacion.exe o como se llame el ejecutable. Eso sí, asegúrate que en esa misma carpeta existe el archivo NombreAplicacion.exe.config.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Renzo19 martes, 27 de diciembre de 2016 3:44
    lunes, 26 de diciembre de 2016 21:18
    Moderador

Todas las respuestas

  • "Renzo19" preguntó:

    > tengo un formulario donde me busca el servidor y la bases de datos de ese
    > servidor y un textbox donde me muestra la cadena de conexión apartir del
    > servidor y la base de datos seleccionada, pero me gustaria que esa cadena
    > de conexión que este hay se guarde en my.settings para que cuando el
    > programa cargue sea con la nueva cadena de conexión.

    Hola:

    Tan solo tienes que referenciar la cadena de conexión existente en el archivo de configuración de tu aplicación y modificarla con los nuevos valores existentes en el formulario de búsqueda que comentas.

    Una vez que en tu proyecto de Visual Basic hayas referenciado el ensamblado System.Configuration.dll, procederías a ejecutar lo siguiente:

    Imports System.Configuration
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            ' Mostramos el formulario para buscar el servidor y la base de datos
            '
            Dim cadenaConexion As String = String.Empty
    
            Using frm As New FormBusqueda()
                Dim dr As DialogResult = frm.ShowDialog()
                If (dr = DialogResult.Cancel) Then
                    ' Se ha cancelado el cuadro de diálogo;
                    ' abandonar el procedimiento
                    Return
                End If
    
                ' Obtenemos la cadena de conexión con el servidor
                ' y la base de datos que aparece en el control
                ' TextBox del formulario de búsqueda.
                '
                cadenaConexion = frm.TextBox1.Text
            End Using
    
            ' Abrimos el archivo de configuración de la aplicación
            Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
    
            ' Referenciamos la sección connectionStrings del archivo de configuración.
            Dim connectionStringsSection As ConnectionStringsSection =
                DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    
            ' Referenciamos la cadena de conexión que deseamos modificar.
            Dim settings As ConnectionStringSettings =
                connectionStringsSection.ConnectionStrings.Item("MiCadenaConexion")
    
            ' Modificamos el valor de la cadena de conexión con los
            ' valores recibidos del formulario:
            settings.ConnectionString = cadenaConexion
    
            ' Guardamos los cambios en el archivo de configuración de la aplicación.
            config.Save(ConfigurationSaveMode.Full, False)
    
        End Sub

    Obviamente, puedes insertar el código de referencia y modificación de la cadena de conexión en el propio formulario de búsqueda, de tal manera que cuando el usuario presione el botón "Aceptar", "Modificar" o como se llame el botón, ejecutes el código indicado para modificar la cadena de conexión en el propio archivo de configuración de la aplicación.

    Por último, te comento que no es necesario que reinicies tu aplicación para que los cambios tengan efecto; tal solo tienes que establecer una nueva conexión con la base de datos utilizando los valores modificados de la cadena de conexión existente en el archivo de configuración de la aplicación.

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo y ¡Feliz Navidad!


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    domingo, 25 de diciembre de 2016 8:29
    Moderador
  • Hola Enrique M. Montejo 

    Gracias por ayudarme, entendí que lo que necesito es editar la cadena de conexión en my.settings  para ello  tengo un formulario de prueba con un textbox y un boton en el textbox coloco la cadena de conexión y en el boton se supone que debe editarme el archivo APP.config la sección de la cadena de conexión por la que yo introdusca en el texbox. esto lo hago gracias a tu codigo, asi:

    Imports System.Configuration
    Public Class Form1

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click

            Dim cadenaConexion As String = String.Empty

            cadenaConexion = TxtNuevaCadena.Text

            ' Abrimos el archivo de configuración de la aplicación
            Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)

            ' Referenciamos la sección connectionStrings del archivo de configuración.
            Dim connectionStringsSection As ConnectionStringsSection = DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)

            ' Referenciamos la cadena de conexión que deseamos modificar.
            Dim settings As ConnectionStringSettings = connectionStringsSection.ConnectionStrings.Item("Data Source=desktop-i7cuv6b\SQLEXPRESS;Initial Catalog=Gabriel;Integrated Security=True")

            ' Modificamos el valor de la cadena de conexión con los
            ' valores recibidos del formulario:
            settings.ConnectionString = cadenaConexion

            ' Guardamos los cambios en el archivo de configuración de la aplicación.
            config.Save(ConfigurationSaveMode.Full, False)

        End Sub

    Cuando doy click a ese botón me sale la exeption "Referencia a objeto no no establecida como instancia de un objeto"

     settings.ConnectionString = cadenaConexion (En esta parte marcada) Gracias!


    • Editado Renzo19 domingo, 25 de diciembre de 2016 20:29
    domingo, 25 de diciembre de 2016 19:42
  • "Renzo19" escribió:

    > ' Referenciamos la cadena de conexión que deseamos modificar.
    >  Dim settings As ConnectionStringSettings = connectionStringsSection.ConnectionStrings.Item(
    >           "Data Source=desktop-i7cuv6b\SQLEXPRESS;Initial Catalog=Gabriel;Integrated Security=True")
    >
    > ' Modificamos el valor de la cadena de conexión con los
    > ' valores recibidos del formulario:
    > settings.ConnectionString = cadenaConexion
    >
    > Cuando doy click a ese botón me sale la exeption "Referencia a objeto no no establecida
    > como instancia de un objeto"
    >
    > settings.ConnectionString = cadenaConexion (En esta parte marcada)

    Es normal que obtengas un error de "Referencia a objeto no establecida como instancia de un objeto", porque estás queriendo utilizar un objeto del tipo ConnectionStringSettings cuyo valor es Nothing. Si el valor es Nothing, ¿cómo pretendes utilizar el objeto, con independencia que éste sea del tipo ConnectionStringSettings, sea del tipo DataTable, del tipo SqlConnection o del tipo String? Lo que te tienes que preguntar es el motivo por el cual el objeto tiene el valor Nothing, y el motivo de ello no es más que el siguiente.

    Fíjate cómo estás referenciando la cadena de conexión que tienes en el archivo de configuración de tu aplicación:

    > ' Referenciamos la cadena de conexión que deseamos modificar.
    >  Dim settings As ConnectionStringSettings = connectionStringsSection.ConnectionStrings.Item("Data Source=desktop-i7cuv6b\SQLEXPRESS;Initial Catalog=Gabriel;Integrated Security=True")

    ¿Tu crees que ese es el nombre correcto de una cadena de conexión? Más bien diría que es la propia cadena de conexión que tienes escrita en tu App.config.

    Ahora fíjate cómo te indiqué en mi ejemplo la manera de referenciar una cadena de conexión por su nombre:

        ' Referenciamos la cadena de conexión que deseamos modificar.
        Dim settings As ConnectionStringSettings =
                connectionStringsSection.ConnectionStrings.Item("MiCadenaConexion")

    Es decir, se comprende que en la sección <connectionStrings> del archivo app.config existe una cadena de conexión con nombre llamada "MiCadenaConexion", la cual tiene la cadena de conexión que por defecto va a utilizar la aplicación:

      <connectionStrings>
    
        <add name="MiCadenaConexion" connectionString="Data Source=desktop-i7cuv6b\SQLEXPRESS;
                  Initial Catalog=Gabriel;Integrated Security=true" providerName="System.Data.SqlClient" />
    
      </connectionStrings>
    

    Pues así es como tienes que referenciar un objeto ConnectionStringSettings, mediante el nombre de la cadena de conexión, no con la cadena de conexión propiamente dicha. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Renzo19 lunes, 26 de diciembre de 2016 16:11
    lunes, 26 de diciembre de 2016 7:43
    Moderador
  • "Enrique M. Montejo" Gracias por responder pero sigo con el problema, mira este es todo mi código del formulario de prueba, ya lo modifique como decías incluso el app.onfig y ahora esta así :

    (Formulario con un textbox y un botón dentro de mi aplicación original)

            

    Imports System.Configuration
    Public Class Form1

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click

            Dim cadenaConexion As String = String.Empty

            cadenaConexion = TxtNuevaCadena.Text

            ' Abrimos el archivo de configuración de la aplicación
            Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)

            ' Referenciamos la sección connectionStrings del archivo de configuración.
            Dim connectionStringsSection As ConnectionStringsSection =
                DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)

            ' Referenciamos la cadena de conexión que deseamos modificar.
            Dim settings As ConnectionStringSettings =
                    connectionStringsSection.ConnectionStrings.Item("MiCadenaConexion")

            ' Modificamos el valor de la cadena de conexión con los
            ' valores recibidos del formulario:
            settings.ConnectionString = cadenaConexion

            ' Guardamos los cambios en el archivo de configuración de la aplicación.
            config.Save(ConfigurationSaveMode.Full, False)

        End Sub



    End Class

    (Archivo app.config)

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
            <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                <section name="login6.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
            </sectionGroup>
        </configSections>
        <connectionStrings>
            <add name="MiCadenaConexion" connectionString="Data Source=desktop-i7cuv6b\SQLEXPRESS;
                  Initial Catalog=Gabriel;Integrated Security=true" providerName="System.Data.SqlClient" />

      </connectionStrings>

        <system.diagnostics>
            <sources>
                <!-- En esta sección se define la configuración del registro para My.Application.Log -->
                <source name="DefaultSource" switchName="DefaultSwitch">
                    <listeners>
                        <add name="FileLog"/>
                        <!-- Quite los comentarios de la sección posterior para escribir en el registro de eventos de la aplicación -->
                        <!--<add name="EventLog"/>-->
                    </listeners>
                </source>
            </sources>
            <switches>
                <add name="DefaultSwitch" value="Information" />
            </switches>
            <sharedListeners>
                <add name="FileLog"
                     type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
                     initializeData="FileLogWriter"/>
                <!-- Quite los comentarios de la sección posterior y reemplace APPLICATION_NAME con el nombre de su aplicación para escribir en el registro de eventos de la aplicación -->
                <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
            </sharedListeners>
        </system.diagnostics>
        <userSettings>
            <login6.My.MySettings>
                <setting name="Color" serializeAs="String">
                    <value>GradientInactiveCaption</value>
                </setting>
                <setting name="Color2" serializeAs="String">
                    <value>GradientActiveCaption</value>
                </setting>
                <setting name="Color3" serializeAs="String">
                    <value>HotTrack</value>
                </setting>
            </login6.My.MySettings>
        </userSettings>
    </configuration>

    Hay esta completo si gustas has la prueba pegandolo en un form aparte y asi vez el error. 


    Renzo Rivera


    • Editado Renzo19 lunes, 26 de diciembre de 2016 15:59
    lunes, 26 de diciembre de 2016 15:58
  • "Renzo19" escribió:

    > Gracias por responder pero sigo con el problema, ...

    ¿Con el mismo problema? ¿Con qué problema continuas? ¿Con modificar la cadena de conexión en el archivo NombreAplicacion.exe.config, con el error "Referencia a objeto no establecida como instancia de un objeto", o es que tienes otro problema diferente? ¿Con qué problema dices que sigues?

    > ... mira este es todo mi código del formulario de prueba, ya lo
    > modifique como decías incluso el app.onfig y ahora esta así :
    >

    Me imagino que habrá sido un error a la hora de escribir el mensaje, pero el archivo de configuración de la aplicación en tiempo de diseño se llama app.CONFIG, no "app.onfig". Y en tiempo de ejecución se transforma en NombreAplicacion.exe.config. ¿OK?

    > Hay esta completo si gustas has la prueba pegandolo en
    > un form aparte y asi vez el error.

    Pues siento desilusionarte, pero después de haberlo probado no encuentro ningún problema para modificar la cadena de conexión llamada "MiCadenaConexion" en el archivo de configuración llamado NombreAplicacion.exe.config, que es dónde se modifica la cadena de conexión en tiempo de ejecución, no en el archivo app.config.

    ¿No será esto último lo que te está ocurriendo? Que tu quieres modificar el archivo app.config y el que en realidad se modifica en TIEMPO DE EJECUCIÓN es el archivo NombreAplicacion.exe.config.

    Si estás ejecutando tu proyecto desde el IDE de Visual Studio, tienes que tener presente que cada vez que RECOMPILES el proyecto, se modificará el archivo NombreAplicacion.exe.config con los datos originales que existen en el archivo de configuración de la aplicación (app.config).

    Haz una prueba ejecutando directamente el archivo ejecutable de tu proyecto, aquel que se llame NombreAplicacion.exe. Y si a pesar de ejecutarlo continuas sin poder modificar la cadena de conexión en el archivo NombreAplicacion.exe.config, lo siento muchísimo pero no sé ya a qué se puede deber.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Renzo19 martes, 27 de diciembre de 2016 3:44
    lunes, 26 de diciembre de 2016 17:26
    Moderador
  • Enrique M. Montejo Gracias

    Basicamente lo unico que necesito es que cuando corra el programa me pida la cadena de conexión para conectarse al servidor y la base de datos. Cuando yo la introduzca en un textbox y le de a guardar se conecte y guarde dicha cadena, ahora bien, si corro el programa en otra computadora tendría que poner una nueva cadena de conexión para poderme conectar ya que como tendria la cadena de conexión de la ultima PC obviamente no se conectaría. 

    Es lo que necesito, un formulario en el que pueda insertar una ruta de acceso al servidor y la base de datos con la cual se va a trabajar y que cuando inserte dicha ruta se quede guardada, para que cuando cargue el programa tenga esa ruta escrita de forma que solo sea darle a conectar y listo.


    Renzo Rivera

    lunes, 26 de diciembre de 2016 18:09
  • "Renzo19" escribió:

    > Es lo que necesito, un formulario en el que pueda insertar una ruta de acceso
    > al servidor y la base de datos con la cual se va a trabajar y que cuando
    > inserte dicha ruta se quede guardada, para que cuando cargue el programa tenga
    > esa ruta escrita de forma que solo sea darle a conectar y listo.

    Pero ¿no decías en tu primer mensaje que ya tenías un formulario para esa cuestión que deseas realizar?

    [Hola, tengo un formulario donde me busca el servidor y la bases de datos de ese servidor y un textbox donde me muestra la cadena de conexión a partir del servidor y la base de datos seleccionada, ...]

    Yo lo único que te pregunto es si conoces ya la manera de modificar en TIEMPO DE EJECUCIÓN una cadena de conexión con nombre almacenada en el archivo de configuración de la aplicación NombreAplicacion.exe.config.

    ¿Has probado a ejecutar directamente el archivo ejecutable de la aplicación? ¿Se ha modificado la cadena de conexión?


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Renzo19 martes, 27 de diciembre de 2016 3:44
    lunes, 26 de diciembre de 2016 18:29
    Moderador
  • Enrique M. Montejo Gracias por responder

    Si tengo el formulario, me busca el servidor local y la base de datos y de acuerdo a esos parámetros me genera una cadena de conexión el problema es que dicha cadena no se guarda permanentemente y cada vez que valla a abrir el programa hay que pasar por ese proceso, probé publicando el programa en una carpeta en el escritorio y aun ya instalada;  cuando coloco la cadena de conexión en el textbox y le doy al btnguardar debería ejecutarme el siguiente código

            Dim cadenaConexion As String = String.Empty

            cadenaConexion = TxtNuevaCadena.Text

            ' Abrimos el archivo de configuración de la aplicación
            Dim config As Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)

            ' Referenciamos la sección connectionStrings del archivo de configuración.
            Dim connectionStringsSection As ConnectionStringsSection =
                DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)

            ' Referenciamos la cadena de conexión que deseamos modificar.
            Dim settings As ConnectionStringSettings =
                    connectionStringsSection.ConnectionStrings.Item("MiCadenaConexion")

            ' Modificamos el valor de la cadena de conexión con los
            ' valores recibidos del formulario:
            settings.ConnectionString = cadenaConexion

            ' Guardamos los cambios en el archivo de configuración de la aplicación.
            config.Save(ConfigurationSaveMode.Full, False)

    pero cuando introduzco una cadena falsa de prueba, doy a btnGuardar(Ejecuta el código anterior) y ejecuto el programa, de todas formas se conecta lo que significa que no tuvo ningún efecto.


    Renzo Rivera

    lunes, 26 de diciembre de 2016 19:49
  • "Renzo19" escribió:

    > Si tengo el formulario, me busca el servidor local y la base de datos y de acuerdo
    > a esos parámetros me genera una cadena de conexión el problema es que dicha cadena
    > no se guarda permanentemente ...

    Pero, ¡cómo no se van a guardar permanentemente los cambios efectuados! Discúlpame, pero ahora sí que no me entero de nada. :-((

    Si tu ejecutas ese código a iniciar tu aplicación, los cambios se guardarán PERMANENTEMENTE en el archivo llamado NombreAplicacion.exe.config que hayas DISTRIBUIDO junto con el archivo ejecutable de tu aplicación.

    ¿Qué archivo *.config estás distribuyendo? ¿El archivo app.config o el archivo NombreAplicacion.exe.config? Entiendo que estarás distribuyendo el archivo NombreAplicacion.exe.config. Perdóname que te lo pregunte, pero es que no puedo reproducir lo que nos estás comentando. :-(

    Y para probar todo, tienes que CERRAR VISUAL STUDIO (no es necesario, pero en éste caso vamos a hacer que lo sea), dirigirte a la carpeta donde tienes el archivo ejecutable de tu aplicación (C:\Carpeta\Bin\Debug), y ejecutar directamente el archivo NombreAplicacion.exe o como se llame el ejecutable. Eso sí, asegúrate que en esa misma carpeta existe el archivo NombreAplicacion.exe.config.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Marcado como respuesta Renzo19 martes, 27 de diciembre de 2016 3:44
    lunes, 26 de diciembre de 2016 21:18
    Moderador