none
Modificar cadena de conexion en tiempo de ejecucion RRS feed

  • Pregunta

  • Hola gente necesito que me ayuden: tengo una aplicacion para distribuir y no se como hacer para que la cadena de conexion sea un dato configurable para los objetos. Actualmente configuro esos datos en un access que leo en el arranque y armo la cadeno con la que me conecto por codigo y hago todo con codigo; lo que quiero es esto mismo pero para poder enlazarlo a controles como grillas y eso, pero veo q la conexion en tiempo de ejecucion esta readonly, por favor ayudenme. Desde ya muchas gracias.

    Saludos

     

    Diego

     

     

     

    martes, 7 de octubre de 2008 20:07

Respuestas

  • "ppito68" escribió:

    > Te pongo a continuación el código de la modificación de la cadena el cual lo
    > he puesto en el evento click de un botón "Modificar Dirección", el cual es
    > idéntico a tu código, salvo el nombre de la cadena, que es el que puso el
    > asistente para el origen de datos.
    >
    > connectionStringsSection.ConnectionStrings("pruebas.My.MySettings.clubConnectionString").
    >    ConnectionString = "Data Source=" & TextBoxUrl.Text & _
    >       ";Initial Catalog=club;Persist Security Info=True;User ID=delfin;Password=delfin"
    >
    > config.Save(ConfigurationSaveMode.Modified, False)
    >
    > Al clickar el botón, lo que hago es insertar la dirección del servidor mediante la
    > cadena de un textBox, tal como te marco en negrita, y actúa como si no la hubiera
    > modificado. Para comprobar que ha modificado la dirección, he puesto otro botón para
    > que, mediante tu código de recuperación de la cadena de conexsión, me muestre la cadena
    > actual después de modificarla, y me la muestra modificada, pero al hacer acto seguido
    > una consulta a una tabla, hace caso omiso.
    >
    > Si salgo de la aplicación y vuelvo a entrar, entonces es cuando surte efecto el cambio.
    >
    > Está claro que algo estoy haciendo mal, pero no logro saber qué.

    Para modificar el valor de la cadena de conexión llamada "pruebas.My.MySettings.clubConnectionString" existente en el archivo de configuración de la aplicación, no estás haciendo nada mal, porque así es como se modifica y como se recupera su valor, por lo que no le des más vueltas a ese asunto.

    El problema que observo que tienes es que has configurado un origen de datos en tu proyecto, y lo más seguro es que le habrás indicado al Asistente que te guarde la cadena de conexión en la Configuración de tu proyecto, por lo que ésta se almacena en My.Settings con el nombre 'clubConnectionString', que al ser un valor de '(Cadena de conexión)' tendrá un ámbito de Aplicación, por lo que su valor no se pueda modificar al ser una propiedad de sólo lectura, tal y como indico en otra respuesta más arriba existente en ésta misma conversación.

    ¿Por qué tienes que reiniciar la aplicación para que los cambios surtan efecto? Porque el origen de datos que has configurado lee el valor de la cadena de conexión existente en el archivo de configuración la aplicación cuando ésta se inicia, almacenando en memoria su valor, por lo que las modificaciones que posteriormente realices, no surtirán efecto hasta que reinicies de nuevo la aplicación. Tienes que modificar también en tiempo de ejecución la cadena de conexión que utiliza el objeto Connection asociado al objeto TableAdapter utilizado para acceder a los datos.

        Dim nuevaCadenaConexion = "Data Source=" & TextBoxUrl.Text & _
           ";Initial Catalog=club;Persist Security Info=True;User ID=delfin;Password=delfin"
    
        ' Modificamos el valor en el archivo de configuración de la aplicación.
        '
        Dim config As Configuration = _
            ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
    
        Dim connectionStringsSection As ConnectionStringsSection = _
            DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    
        connectionStringsSection.ConnectionStrings("pruebas.My.MySettings.clubConnectionString").ConnectionString = nuevaCadenaConexion
    
        config.Save(ConfigurationSaveMode.Modified, False)
    
        ' Y ahora modificamos la cadena de conexión que utiliza el objeto
        ' Connection asociado al objeto TableAdapter del origen de datos
        ' utilizado por la aplicación.
        '
        NombreTableAdapter.Connection.ConnectionString = nuevaCadenaConexion
    
        ' Leemos el valor de la cadena de conexión.
        '
        MessageBox.Show(NombreTableAdapter.Connection.ConnectionString)

    Necesariamente tienes que hacer esto si durante el transcurso normal de ejecución de tu aplicación necesitas acceder a otro origen de datos diferente de aquel que utiliza el origen de datos de tu proyecto cuando se inicia la aplicación, es decir, aquel que utiliza la cadena de conexión que aparece en el archivo de configuración de tu aplicació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.




    lunes, 25 de abril de 2016 7:02
    Moderador
  • "dgrinovero" preguntó:

    > no se como hacer para que la cadena de conexion sea un dato configurable para los objetos.

    Añade un archivo de configuración de tu aplicación (App.config), y crea en ella la cadena de conexión inicial de tu aplicación. Más o menos, el archivo XML sería el siguiente:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>

        <connectionStrings>
            <add name="cadenaConexion"
                connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Mis documentos\Bd1.mdb"
                providerName="System.Data.OleDb" />
        </connectionStrings>

        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
        </startup>
    </configuration>

    Como podrás observar, hemos añadido una cadena de conexión llamada «cadenaConexion". Cuando desees modificar su valor, ejecutarías lo siguiente:

    Imports System.Configuration

            Dim config As System.Configuration.Configuration = _
                ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)

            Dim connectionStringsSection As ConnectionStringsSection = _
                DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)

            connectionStringsSection.ConnectionStrings("cadenaConexion").ConnectionString = _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Carpeta\Base.mdb"

            config.Save(ConfigurationSaveMode.Modified, False)

    Y cuando desees recuperar su valor, ejecutarías ésto otro:

            Dim config As System.Configuration.Configuration = _
              ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)

            Dim connectionStringsSection As ConnectionStringsSection = _
                DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)

            MessageBox.Show(connectionStringsSection.ConnectionStrings("cadenaConexion").ConnectionString)

    Por último indicarte que en las referencias de tu proyecto tienes que añadir el ensamblado .NET «System.Configuration».

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    sábado, 7 de mayo de 2011 18:40
    Moderador
  • "ppito68" escribió:

    > El problema que tengo es que utilizando tu código para modificar la cadena
    > de conexión, parece que no la modifica hasta que no reinicie la aplicación.

    Hola:

    Si has ejecutado el código para modificar la cadena de conexión en el archivo de configuración de la aplicación, tal cual aparece escrito:

        Dim config As System.Configuration.Configuration = _
                 ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
    
        Dim connectionStringsSection As ConnectionStringsSection = _
                 DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    
        connectionStringsSection.ConnectionStrings("cadenaConexion").ConnectionString = _
                 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Carpeta\Base.mdb"
    
        config.Save(ConfigurationSaveMode.Modified, False)
    

    entiendo que se modificará el valor de la cadena de conexión sin necesidad de tener que reiniciar la aplicación.

    > Por otro lado, una vez modificada la cadena de conexión, si abro el archivo
    > App.Config, las modificaciones que le he hecho no aparecen, sin embargo dichas
    > modificaciones son efectivas una vez reiniciada la aplicación.

    Es que NO ES en el archivo app.config donde se modifica, si no en el archivo de configuración de la aplicación, que será aquel con extensión *.config que se encuentre en la misma carpeta que contiene el ejecutable de tu aplicación.

    Si por ejemplo, el ejecutable de tu aplicación se llama WindowsApplication1.exe, el archivo de configuración de la aplicación se llamará WindowsApplication1.exe.config, que es donde se guardarán las modificaciones que efectues en tiempo de ejecución.

    Si por casualidad te encuentras ejecutando tu aplicación desde el propio IDE de Visual Studio, puede que las modificaciones que hayas efectuado en el archivo WindowsApplication1.exe.config no surtan efecto la próxima vez que inicies la ejecución (pulses la tecla F5), sobre todo si has decidido Recompilar la solución, ya que el archivo WindowsApplication1.exe.config resultante será sustituido por el contenido del archivo app.config original, de ahí que a lo mejor de la sensación que las modificaciones efectuadas en tiempo de ejecución no se guardan.

    Para ver si funciona o no, tienes que ejecutar directamente el archivo ejecutable de tu aplicación en lugar de ejecutarla desde el IDE de Visual Studio.

    Un saludo


    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, 24 de abril de 2016 18:41
    Moderador
  • "brxyxmp" preguntó:

    >   ' Y ahora modificamos la cadena de conexión que utiliza el objeto
    >   ' Connection asociado al objeto TableAdapter del origen de datos
    >   ' utilizado por la aplicación.
    >   '
    >   NombreTableAdapter.Connection.ConnectionString = nuevaCadenaConexion
    >
    > Tengo duda con la referencia de "NombreTableAdapter.Connection.ConnectionString".
    > ¿Cuál sería el TableAdapter, o a qué objeto hace referencia?

    Hola:

    NombreTableAdapter es el nombre de un objeto TableAdapter cualquiera que has podido crear en tu proyecto .NET mediante el Asistente para configuración de orígenes de datos.

    Imagina que el origen de datos que has configurado apunta a la tabla Clientes de tu base de datos. Pues el nombre por defecto del objeto TableAdapter creado se llamará ClientesTableAdapter.

    Un saludo


    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.

    viernes, 25 de noviembre de 2016 8:13
    Moderador

Todas las respuestas

  • :-)

    Hola,

     

    La cadena de conexión se almacena en el los settings de tu aplicación. Puedes modificarlo en tiempo de ejecución y se guardará automáticamente al cerrar la aplicación (con VB, con C# debes guardar los cambios explícitamente):

     

    My.Settings.ConnectionString = "gdfhdfhdhd"

     

    (el nombre de la cadena de conexión puede cambiar)

     

    jueves, 9 de octubre de 2008 7:46
    Moderador
  • "dgrinovero" preguntó:

    > no se como hacer para que la cadena de conexion sea un dato configurable para los objetos.

    Añade un archivo de configuración de tu aplicación (App.config), y crea en ella la cadena de conexión inicial de tu aplicación. Más o menos, el archivo XML sería el siguiente:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>

        <connectionStrings>
            <add name="cadenaConexion"
                connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Mis documentos\Bd1.mdb"
                providerName="System.Data.OleDb" />
        </connectionStrings>

        <startup>
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
        </startup>
    </configuration>

    Como podrás observar, hemos añadido una cadena de conexión llamada «cadenaConexion". Cuando desees modificar su valor, ejecutarías lo siguiente:

    Imports System.Configuration

            Dim config As System.Configuration.Configuration = _
                ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)

            Dim connectionStringsSection As ConnectionStringsSection = _
                DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)

            connectionStringsSection.ConnectionStrings("cadenaConexion").ConnectionString = _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Carpeta\Base.mdb"

            config.Save(ConfigurationSaveMode.Modified, False)

    Y cuando desees recuperar su valor, ejecutarías ésto otro:

            Dim config As System.Configuration.Configuration = _
              ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)

            Dim connectionStringsSection As ConnectionStringsSection = _
                DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)

            MessageBox.Show(connectionStringsSection.ConnectionStrings("cadenaConexion").ConnectionString)

    Por último indicarte que en las referencias de tu proyecto tienes que añadir el ensamblado .NET «System.Configuration».

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    sábado, 7 de mayo de 2011 18:40
    Moderador
  • "Lluis Franco" escribió:

    > La cadena de conexión se almacena en el los settings de tu aplicación.
    > Puedes modificarlo en tiempo de ejecución y se guardará automáticamente
    > al cerrar la aplicación (con VB, con C# debes guardar los cambios
    > explícitamente):
    >
    > My.Settings.ConnectionString = "gdfhdfhdhd"

    Hola, Lluís:

    Eso está bien si la propiedad dinámica no es del tipo «(Cadena de conexión)», porque de serlo, entonces el ámbito de la propiedad será a nivel de «Aplicación», lo que significa que la propiedad será de «sólo lectura».

    Para que se pueda modificar el valor, la propiedad tiene que tener un ámbito de «Usuario».

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    • Propuesto como respuesta Morrocos martes, 7 de junio de 2011 5:42
    • Votado como útil Laura CeglzModerator lunes, 28 de noviembre de 2016 20:05
    sábado, 7 de mayo de 2011 18:44
    Moderador
  • Hola enrique, he visto este hilo, ya que me encontraba con el mismo problema.

    He dado todos los pasos que explicas en tu contestación, excepto la de creación del archivo de configuración, ya que ese paso lo hizo el asistente de creación de origen de datos mediante las herramientas para este fin.

    El problema que tengo es que utilizando tu código para modificar la cadena de conexión, parece que no la modifica hasta que no reinicie la aplicación.

    Por otro lado, una vez modificada la cadena de conexión, si abro el archivo App.Config, las modificaciones que le he hecho no aparecen, sin embargo dichas modificaciones son efectivas una vez reiniciada la aplicación.

    ¿Donde queda almacenada la modificación de la cadena de conexión?

    ¿Cómo hacer efectiva la modificación sin necesidad de reiniciar la aplicación?

    Muchas gracias y un saludo.

    domingo, 24 de abril de 2016 18:23
  • "ppito68" escribió:

    > El problema que tengo es que utilizando tu código para modificar la cadena
    > de conexión, parece que no la modifica hasta que no reinicie la aplicación.

    Hola:

    Si has ejecutado el código para modificar la cadena de conexión en el archivo de configuración de la aplicación, tal cual aparece escrito:

        Dim config As System.Configuration.Configuration = _
                 ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
    
        Dim connectionStringsSection As ConnectionStringsSection = _
                 DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    
        connectionStringsSection.ConnectionStrings("cadenaConexion").ConnectionString = _
                 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Carpeta\Base.mdb"
    
        config.Save(ConfigurationSaveMode.Modified, False)
    

    entiendo que se modificará el valor de la cadena de conexión sin necesidad de tener que reiniciar la aplicación.

    > Por otro lado, una vez modificada la cadena de conexión, si abro el archivo
    > App.Config, las modificaciones que le he hecho no aparecen, sin embargo dichas
    > modificaciones son efectivas una vez reiniciada la aplicación.

    Es que NO ES en el archivo app.config donde se modifica, si no en el archivo de configuración de la aplicación, que será aquel con extensión *.config que se encuentre en la misma carpeta que contiene el ejecutable de tu aplicación.

    Si por ejemplo, el ejecutable de tu aplicación se llama WindowsApplication1.exe, el archivo de configuración de la aplicación se llamará WindowsApplication1.exe.config, que es donde se guardarán las modificaciones que efectues en tiempo de ejecución.

    Si por casualidad te encuentras ejecutando tu aplicación desde el propio IDE de Visual Studio, puede que las modificaciones que hayas efectuado en el archivo WindowsApplication1.exe.config no surtan efecto la próxima vez que inicies la ejecución (pulses la tecla F5), sobre todo si has decidido Recompilar la solución, ya que el archivo WindowsApplication1.exe.config resultante será sustituido por el contenido del archivo app.config original, de ahí que a lo mejor de la sensación que las modificaciones efectuadas en tiempo de ejecución no se guardan.

    Para ver si funciona o no, tienes que ejecutar directamente el archivo ejecutable de tu aplicación en lugar de ejecutarla desde el IDE de Visual Studio.

    Un saludo


    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, 24 de abril de 2016 18:41
    Moderador
  • Muchas gracias, Enrique, por tu rápida respuesta.

    Pero no sé qué estoy haciendo mal. Lo ejecuto tal como me sugieres. Copio el exe y el config incluso en una carpeta a parte y sigue teniendo el mismo efecto.

    Te pongo a continuación el código de la modificación de la cadena el cual lo he puesto en el evento click de un botón "Modificar Dirección", el cual es idéntico a tu código, salvo el nombre de la cadena, que es el que puso el asistente para el origen de datos.

     Dim config As System.Configuration.Configuration = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
            Dim connectionStringsSection As ConnectionStringsSection = DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
            connectionStringsSection.ConnectionStrings("pruebas.My.MySettings.clubConnectionString").ConnectionString = "Data Source=" & TextBoxUrl.Text & _
                ";Initial Catalog=club;Persist Security Info=True;User ID=delfin;Password=delfin"
            config.Save(ConfigurationSaveMode.Modified, False)

    Al clickar el botón, lo que hago es insertar la dirección del servidor mediante la cadena de un textBox, tal como te marco en negrita, y actúa como si no la hubiera modificado. Para comprobar que ha modificado la dirección, he puesto otro botón para que, mediante tu código de recuperación de la cadena de conexsión, me muestre la cadena actual después de modificarla, y me la muestra modificada, pero al hacer acto seguido una consulta a una tabla, hace caso omiso.

    Si salgo de la aplicación y vuelvo a entrar, entonces es cuando surte efecto el cambio.

    Está claro que algo estoy haciendo mal, pero no logro saber qué.

    Gracias nuevamente Enrique y un saludo.


    domingo, 24 de abril de 2016 19:16
  • Hola ppito68.

    Si necesitas reiniciar tu programa para guardar la configuración, bien puedes pedirle al usuario que lo haga y le avisas que sino lo hace, los datos no se guardaran.

    Otra opción, es SÍ utilizar el string de la configuración, pero no directamente en tu programa, sino por un string definido por código; entonces cuando inicias tu programa, se toma el valor de la configuración y se lo aplica al string que hay en el código, y después en todo el programa utilizas el string del código. Entonces, cuando debas actualizar la cadena de conexión en tiempo de ejecución, actualizas la configuración y el string al mismo tiempo, no debiendo reiniciar el programa.

    No olvidar usar My.Settings.Save() en vb.net, o su equivalente,   Properties.Settings.Default.Save() en C#.


    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]

    domingo, 24 de abril de 2016 21:54
  • "ppito68" escribió:

    > Te pongo a continuación el código de la modificación de la cadena el cual lo
    > he puesto en el evento click de un botón "Modificar Dirección", el cual es
    > idéntico a tu código, salvo el nombre de la cadena, que es el que puso el
    > asistente para el origen de datos.
    >
    > connectionStringsSection.ConnectionStrings("pruebas.My.MySettings.clubConnectionString").
    >    ConnectionString = "Data Source=" & TextBoxUrl.Text & _
    >       ";Initial Catalog=club;Persist Security Info=True;User ID=delfin;Password=delfin"
    >
    > config.Save(ConfigurationSaveMode.Modified, False)
    >
    > Al clickar el botón, lo que hago es insertar la dirección del servidor mediante la
    > cadena de un textBox, tal como te marco en negrita, y actúa como si no la hubiera
    > modificado. Para comprobar que ha modificado la dirección, he puesto otro botón para
    > que, mediante tu código de recuperación de la cadena de conexsión, me muestre la cadena
    > actual después de modificarla, y me la muestra modificada, pero al hacer acto seguido
    > una consulta a una tabla, hace caso omiso.
    >
    > Si salgo de la aplicación y vuelvo a entrar, entonces es cuando surte efecto el cambio.
    >
    > Está claro que algo estoy haciendo mal, pero no logro saber qué.

    Para modificar el valor de la cadena de conexión llamada "pruebas.My.MySettings.clubConnectionString" existente en el archivo de configuración de la aplicación, no estás haciendo nada mal, porque así es como se modifica y como se recupera su valor, por lo que no le des más vueltas a ese asunto.

    El problema que observo que tienes es que has configurado un origen de datos en tu proyecto, y lo más seguro es que le habrás indicado al Asistente que te guarde la cadena de conexión en la Configuración de tu proyecto, por lo que ésta se almacena en My.Settings con el nombre 'clubConnectionString', que al ser un valor de '(Cadena de conexión)' tendrá un ámbito de Aplicación, por lo que su valor no se pueda modificar al ser una propiedad de sólo lectura, tal y como indico en otra respuesta más arriba existente en ésta misma conversación.

    ¿Por qué tienes que reiniciar la aplicación para que los cambios surtan efecto? Porque el origen de datos que has configurado lee el valor de la cadena de conexión existente en el archivo de configuración la aplicación cuando ésta se inicia, almacenando en memoria su valor, por lo que las modificaciones que posteriormente realices, no surtirán efecto hasta que reinicies de nuevo la aplicación. Tienes que modificar también en tiempo de ejecución la cadena de conexión que utiliza el objeto Connection asociado al objeto TableAdapter utilizado para acceder a los datos.

        Dim nuevaCadenaConexion = "Data Source=" & TextBoxUrl.Text & _
           ";Initial Catalog=club;Persist Security Info=True;User ID=delfin;Password=delfin"
    
        ' Modificamos el valor en el archivo de configuración de la aplicación.
        '
        Dim config As Configuration = _
            ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
    
        Dim connectionStringsSection As ConnectionStringsSection = _
            DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    
        connectionStringsSection.ConnectionStrings("pruebas.My.MySettings.clubConnectionString").ConnectionString = nuevaCadenaConexion
    
        config.Save(ConfigurationSaveMode.Modified, False)
    
        ' Y ahora modificamos la cadena de conexión que utiliza el objeto
        ' Connection asociado al objeto TableAdapter del origen de datos
        ' utilizado por la aplicación.
        '
        NombreTableAdapter.Connection.ConnectionString = nuevaCadenaConexion
    
        ' Leemos el valor de la cadena de conexión.
        '
        MessageBox.Show(NombreTableAdapter.Connection.ConnectionString)

    Necesariamente tienes que hacer esto si durante el transcurso normal de ejecución de tu aplicación necesitas acceder a otro origen de datos diferente de aquel que utiliza el origen de datos de tu proyecto cuando se inicia la aplicación, es decir, aquel que utiliza la cadena de conexión que aparece en el archivo de configuración de tu aplicació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.




    lunes, 25 de abril de 2016 7:02
    Moderador
  • Muchas gracias, Enrique. Mejor explicado, imposible.

    Un saludo

    jueves, 5 de mayo de 2016 16:09

  • El problema que observo que tienes es que has configurado un origen de datos en tu proyecto, y lo más seguro es que le habrás indicado al Asistente que te guarde la cadena de conexión en la Configuración de tu proyecto, por lo que ésta se almacena en My.Settings con el nombre 'clubConnectionString', que al ser un valor de '(Cadena de conexión)' tendrá un ámbito de Aplicación, por lo que su valor no se pueda modificar al ser una propiedad de sólo lectura, tal y como indico en otra respuesta más arriba existente en ésta misma conversación.

    ¿Por qué tienes que reiniciar la aplicación para que los cambios surtan efecto? Porque el origen de datos que has configurado lee el valor de la cadena de conexión existente en el archivo de configuración la aplicación cuando ésta se inicia, almacenando en memoria su valor, por lo que las modificaciones que posteriormente realices, no surtirán efecto hasta que reinicies de nuevo la aplicación. Tienes que modificar también en tiempo de ejecución la cadena de conexión que utiliza el objeto Connection asociado al objeto TableAdapter utilizado para acceder a los datos.

        Dim nuevaCadenaConexion = "Data Source=" & TextBoxUrl.Text & _
           ";Initial Catalog=club;Persist Security Info=True;User ID=delfin;Password=delfin"
    
        ' Modificamos el valor en el archivo de configuración de la aplicación.
        '
        Dim config As Configuration = _
            ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath)
    
        Dim connectionStringsSection As ConnectionStringsSection = _
            DirectCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
    
        connectionStringsSection.ConnectionStrings("pruebas.My.MySettings.clubConnectionString").ConnectionString = nuevaCadenaConexion
    
        config.Save(ConfigurationSaveMode.Modified, False)
    
        ' Y ahora modificamos la cadena de conexión que utiliza el objeto
        ' Connection asociado al objeto TableAdapter del origen de datos
        ' utilizado por la aplicación.
        '
        NombreTableAdapter.Connection.ConnectionString = nuevaCadenaConexion
    
        ' Leemos el valor de la cadena de conexión.
        '
        MessageBox.Show(NombreTableAdapter.Connection.ConnectionString)

    Hola,

    Tengo duda con la referencia de "NombreTableAdapter.Connection.ConnectionString". ¿Cuál sería el TableAdapter, o a qué objeto hace referencia?

    Gracias, y saludos.

    jueves, 24 de noviembre de 2016 4:42
  • "brxyxmp" preguntó:

    >   ' Y ahora modificamos la cadena de conexión que utiliza el objeto
    >   ' Connection asociado al objeto TableAdapter del origen de datos
    >   ' utilizado por la aplicación.
    >   '
    >   NombreTableAdapter.Connection.ConnectionString = nuevaCadenaConexion
    >
    > Tengo duda con la referencia de "NombreTableAdapter.Connection.ConnectionString".
    > ¿Cuál sería el TableAdapter, o a qué objeto hace referencia?

    Hola:

    NombreTableAdapter es el nombre de un objeto TableAdapter cualquiera que has podido crear en tu proyecto .NET mediante el Asistente para configuración de orígenes de datos.

    Imagina que el origen de datos que has configurado apunta a la tabla Clientes de tu base de datos. Pues el nombre por defecto del objeto TableAdapter creado se llamará ClientesTableAdapter.

    Un saludo


    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.

    viernes, 25 de noviembre de 2016 8:13
    Moderador