none
Alterar ConnectionString do App.Config RRS feed

  • Discussão Geral

  • Pessoal, tenho um form aonde tem 3 TextBox, "Server", "NomeBanco", "Porta", eu preciso ler a connectionString do app.config e jogar os valores em cada TextBox "connectionString="server=localhost;Port=4645;database=sgefige"
      providerName="Npgsql" />".

    eu preciso também que altera essa connectionString para quando for um terminal mudar o endereço do Server. Banco de dados usado PostgreSQL. Alguém sabe como posso fazer?, não consegui achar nada até agora.


    • Editado Guilherme Walter segunda-feira, 22 de fevereiro de 2016 13:00 erro
    • Tipo Alterado Marcos SJ segunda-feira, 22 de fevereiro de 2016 14:17 Threads de "How to" serão modificadas para discussão geral
    segunda-feira, 22 de fevereiro de 2016 12:54

Todas as Respostas

  • Bom dia Guilherme,

    No link abaixo eu explico como faz essa alteração de chaves no webconfig, mas acredito que no appconfig seja da mesma maneira.

    http://smcode.com.br/AlteraWebConfig.aspx

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/

    segunda-feira, 22 de fevereiro de 2016 14:53
  • Bom dia Bruno,

    Isso que você explica é para fazer as alteração né? e pra ler e jogar os valores nos TextBox?

    segunda-feira, 22 de fevereiro de 2016 14:58
  • Guilherme,

    Manipulação de string... Pode usar Regex, ou ir splitando até achar o valor...

    Dps basta colocar os valores no textbox:

    meuTextBox.Text = "....."


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    segunda-feira, 22 de fevereiro de 2016 15:20
  • O que eu quero saber é como pegar o valor da linha, tens um exemplo?
    segunda-feira, 22 de fevereiro de 2016 18:30
  • isso? 

    System.Configuration.ConfigurationManager.
       ConnectionStrings["connectionStringName"].ConnectionString;


    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    segunda-feira, 22 de fevereiro de 2016 19:08
  • Não, ai ele vai me retornar um valor igual este "server=localhost;Port=4645;uid=teste;pwd=teste;database=sgefige"

    o que eu preciso fazer é, após ele buscar essa linha, pegar o valor que ta no server "localhost", jogar no textbox, pegar valor da porta e jogar em outro textbox, assim por diante entendeu?

    segunda-feira, 22 de fevereiro de 2016 19:13
  • Você pode fazer uma varredura neste valor, lendo por exemplo pegar o do server e jogar no textbox e ir seguindo nesta lógica com os outros valores.
    segunda-feira, 22 de fevereiro de 2016 20:41
  • Para alterar eu já fiz uma vez com sql, você pode tentar adaptar ao seu código.

    utilizei essa classe para verificar se a conexão está ok, para alterar.

      private SqlConnection ConexionBD = new SqlConnection();
                public bool TestarConexao(string novaconexao)
                {
                    bool functionReturnValue = false;
                    ConexionBD.ConnectionString = novaconexao;
                    if (AbrirConexao())
                    {
                        functionReturnValue = true;
                        FecharConexao();
                    }
                    else
                    {
                        functionReturnValue = false;
                    }
                    return functionReturnValue;
                }
    
                private bool AbrirConexao()
                {
                    bool functionReturnValue = false;
                    try
                    {
                        ConexionBD.Open();
                        functionReturnValue = true;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        functionReturnValue = false;
                    }
                    return functionReturnValue;
    
                }
    
                private bool FecharConexao()
                {
                    bool functionReturnValue = false;
                    try
                    {
                        ConexionBD.Close();
                        functionReturnValue = true;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                        functionReturnValue = false;
                    }
                    return functionReturnValue;
    
                }

    Depois coloquei o formulário com os textbox para preencher cada campo.

    e o código ficou assim para testar, só após testar que deixei salvar, pq caso o usuário digite uma conexão que não exista, pra não dar erro depois.

       string novaconexao = ("Data Source="
                             + (txtservidor.Text + (";AttachDbFilename="
                             + (txtbd.Text + (";User ID="
                             + (txtusuario.Text + (";Password="
                             + (txtsenha.Text + ""))))))));
                if (conexao.TestarConexao(novaconexao))
                {
                    MessageBox.Show("Conexão testada com sucesso!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    button2.Enabled = true;
                }
                else
                {
                    MessageBox.Show("Conexão incorreta, verifique os dados e tente novamente!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    button2.Enabled = false;
                }

    e para salvar.

    try
                {
                    string conexao;
                    conexao = ("Data Source="
                             + (txtservidor.Text + (";Initial Catalog="
                             + (txtbd.Text + (";User ID="
                             + (txtusuario.Text + (";Password="
                             + (txtsenha.Text + ""))))))));
          
                    System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                    
                    config.ConnectionStrings.ConnectionStrings["SISTEMA.Properties.Settings.ccb"].ConnectionString = conexao;
                    config.Save(ConfigurationSaveMode.Modified);
    
                
                    MessageBox.Show("Conexão salva com sucesso, o sistema será reiniciado!", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
    
                    try
                    {
                        fechar = 0;
                        clslogin pegaid = new clslogin();
                        clsdb.ExecutaSQL("insert into log(usuario_id,historico,data,hora) values(" + pegaid.Id_user + ",'" + "Reiniciou o sistema " + "',getdate(),getdate())");
                        Application.Restart();
    
                    }
                    catch
                    {
                        MessageBox.Show("Não foi possível reiniciar o sistema ! ", "Erro no Sistema", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message);
                }

    Espero que te ajude.


    segunda-feira, 22 de fevereiro de 2016 20:49
  • Mariana, no seu código ele pega o valor que esta no TextBox e grava no app.config, isso eu já consigo, mas para fazer o inverso que eu preciso, pegar o valor atual da ConnectionString e jogar cada nos TextBox para que seja alterado.
    segunda-feira, 22 de fevereiro de 2016 22:59
  • Guilherme,

    O que você precisa para finalizar seu código é isto:

    SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectString);
    txtbd.Text = builder.AttachDBFilename;
    //txtbd.Text = builder.InitialCatalog;
    txtservidor.Text = builder.DataSource;
    txtusuario.Text =  builder.UserID;
    txtsenha.Text = builder.Password;

    terça-feira, 23 de fevereiro de 2016 00:31
  • Obrigado Cesar, deu certo.
    terça-feira, 23 de fevereiro de 2016 01:31
  • Obrigado Mariana, alterei ele de acordo com a minha necessidade e deu certo.
    terça-feira, 23 de fevereiro de 2016 01:32