none
Cambiar propiedad connectionString en tiempo de ejecución del programa RRS feed

  • Pregunta

  • Buenas tardes
    En mi proyecto inicialmente tengo una conexión a una base de datos access, me guié para crear una función que al cargar el fomulario cambiara el valor de la propíedad connectionString. El problema está en que inicialmente ésta propiedad está vacía puesto que no le puedo colocar una ruta al ser mi programa utilizado por otros computadores y aparece un error. Lo evito, se carga el formulario y cierro. Las siguientes veces funciona como debería ser.

    La pregunta está en cómo hago para que al iniciarse el programa lea un archivo txt donde tengo la ruta de conexión y se cargue la propiedad connectionString sin que me aparezca el error. En otras palabras, cómo hago para que primero lea el archivo txt, cargue la propiedad connectionString y luego se ejecute normalmente el programa?

    App.config: 

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
        </configSections>
        <connectionStrings>
            <add name="WindowsFormsApp1.Properties.Settings.SAFEConnectionString"
                connectionString=""
                providerName="System.Data.OleDb" />
        </connectionStrings>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
        </startup>
    </configuration>

    form.cs:

    private void Form1_Load(object sender, EventArgs e)
            {
                var access_conexion = conexion.access.obtenerConexion();
            }

    access.cs

    public static Boolean obtenerConexion()
            {
                StreamReader objReader = new StreamReader("configAccess.txt");
                string sLine = "";
                ArrayList arrText = new ArrayList();
                while (sLine != null)
                {
                    sLine = objReader.ReadLine();
                    if (sLine != null)
                        arrText.Add(sLine);
                }
                objReader.Close();
                SaveConnectionString("WindowsFormsApp1.Properties.Settings.SAFEConnectionString", arrText[1].ToString());
                
                return true;
            }

            public static void SaveConnectionString(string connectionStringName, string connectionString)
            {
                Configuration appconfig =
                    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                appconfig.ConnectionStrings.ConnectionStrings[connectionStringName].ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + connectionString + "'";
                appconfig.Save();
            }

    martes, 23 de octubre de 2018 18:01

Respuestas

  • Hola:

    Prueba que al cargar el programa la base de datos Access la coja donde tienes instalado el ejecutable del programa. En el app.config sería así: Data Source =|DataDirectory|\BaseDeDatos"

    Después ya aplicas el cambio en el app.config que indicas.

    Un saludo.

    Gemma

    • Propuesto como respuesta Pablo Rubio jueves, 25 de octubre de 2018 16:38
    • Marcado como respuesta Pablo Rubio viernes, 26 de octubre de 2018 17:48
    martes, 23 de octubre de 2018 18:54