Problemas com o arquivo app.config
28/09/2010
0
Seguinte, estou desenvolvendo uma pequena aplicação, e estou com o seguinte problema... no meu arquivo app.config estão os dados para connectionString, qndo não é possível efetuar a conexão no banco de dados, eu edito os parâmetros da connectionString em tempo de execução, ela dá um refresh na connectionString e viabiliza a conexão com o banco de dados. Porém, ela não substitui os valores incorretos no arquivo de configuração, aí toda vez q executo a aplicação tenho q reconfigurar... segue o código abaixo...
Tela:
app.config:<?xml version="1.0" encoding="utf-8" ?><configuration> <!-- A sessão abaixo armazena os valores de conexão para serem amostrados nos textbox --> <appSettings> <add key="Servidor" value="10.74.2.16,1433"/> <add key="InstBanco" value="DBMSSOCN"/> <add key="Banco" value="agenda"/> <add key="Usuario" value="sa"/> <add key="Senha" value="kerberos"/> </appSettings> <!-- A sessão abaixo armazena a connectionString utilizada para efetuar a conexão --> <connectionStrings> <add name="conexaoDB" connectionString="Data Source=10.74.2.16,1433; Network Library=DBMSSOCN; Initial Catalog=agenda;User ID=sa;Password=kerberos" providerName="System.Data.SqlClient"/> </connectionStrings></configuration>
Classe para conexão:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Data;using System.Data.SqlClient;using System.Data.Common;using System.Diagnostics;
namespace sga{ class connDB { ///<summary> ///Variável onde fica armazenado o objeto da classe, para ser utilizado no padrão singleton /// </summary> private static connDB instance;
String strConn = ConfigurationManager.ConnectionStrings["conexaoDB"].ConnectionString; SqlConnection conn = new SqlConnection(); SqlConnectionStringBuilder myCSB = new SqlConnectionStringBuilder();
/// <summary> /// Propriedade que armazena a instância da classe /// </summary> private connDB() { }
/// <summary> /// Método get que fornece a instância da classe (padrão Singleton, lembrando que não existe método 'set' neste caso) /// </summary>
public static connDB Instance { get { if (instance == null) { instance = new connDB(); } return instance; } } //fim da implementação padrão singleton
/// <summary> /// Endereço do servidor do banco de dados /// </summary> public String Servidor { get; set; } /// <summary> /// Conexão via tcp/ip /// </summary> public String InstBanco { get; set; }
/// <summary> /// Nome do banco de dados /// </summary> public String Banco { get; set; }
/// <summary> /// Usuário do banco de dados /// </summary> public String Usuario { get; set; }
/// <summary> /// Senha do banco de dados /// </summary> public String Senha { get; set; }
public DbConnection conectar() { try { conn.ConnectionString = strConn;
if (conn.State != ConnectionState.Open) { //cria uma nova string de conexao myCSB.DataSource = this.Servidor; myCSB.NetworkLibrary = this.InstBanco; myCSB.InitialCatalog = this.Banco; myCSB.UserID = this.Usuario; myCSB.Password = this.Senha;
conn.ConnectionString = myCSB.ConnectionString;
try { conn.Open(); } catch (Exception ex1) { Console.WriteLine(ex1.Message); } } else conn.Open(); } catch (Exception ex) { Console.WriteLine(ex.Message); } return conn; }
public string novaStringConn() { myCSB.DataSource = this.Servidor; myCSB.NetworkLibrary = this.InstBanco; myCSB.InitialCatalog = this.Banco; myCSB.UserID = this.Usuario; myCSB.Password = this.Senha;
return myCSB.ConnectionString; } }}
código do formulário:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.Common;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Configuration;using System.Text;using System.Windows.Forms;
namespace sga{ public partial class frm_conexao : Form { public frm_conexao() { InitializeComponent(); }
//Busca arquivo de configuração Configuration configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
//Ao abrir a janela principal executar private void frm_conexao_Load(object sender, EventArgs e) { //puxa as variáveis pré definidas do app.config txtServidor.Text = ConfigurationManager.AppSettings["Servidor"]; txtInstancia.Text = ConfigurationManager.AppSettings["InstBanco"]; txtBanco.Text = ConfigurationManager.AppSettings["Banco"]; txtUsuario.Text = ConfigurationManager.AppSettings["Usuario"]; txtSenha.Text = ConfigurationManager.AppSettings["Senha"];
//tentar conectar connDB db = connDB.Instance; DbConnection conn = db.conectar();
if (conn.State == ConnectionState.Open) { lblStatus.Text = "Conectado"; lblStatus.ForeColor = Color.Blue; } else { lblStatus.Text = "Não conectado"; lblStatus.ForeColor = Color.Red; } }
private void btnConectar_Click(object sender, EventArgs e) { AppSettingsSection appSetSec = configFile.AppSettings;
connDB db = connDB.Instance; db.Servidor = txtServidor.Text; db.InstBanco = txtInstancia.Text; db.Banco = txtBanco.Text; db.Usuario = txtUsuario.Text; db.Senha = txtSenha.Text;
DbConnection conn = db.conectar();
if (conn.State == ConnectionState.Open) { lblStatus.Text = "Conectado"; lblStatus.ForeColor = Color.Blue; appSetSec.Settings["Servidor"].Value = txtServidor.Text; appSetSec.Settings["InstBanco"].Value = txtInstancia.Text; appSetSec.Settings["Banco"].Value = txtBanco.Text; appSetSec.Settings["Usuario"].Value = txtUsuario.Text; appSetSec.Settings["Senha"].Value = txtSenha.Text;
//Retorna a seção do connectionStrings ConnectionStringsSection csSection = configFile.ConnectionStrings;
//Apaga a connectionString atual csSection.ConnectionStrings.Remove("conexaoDB");
//Adiciona a nova connectionString csSection.ConnectionStrings.Add(new ConnectionStringSettings("conexaoDB", "Data Source=" + txtServidor.Text + "; Network Library=" + txtInstancia.Text + "; Initial Catalog=" + txtBanco.Text + "; User ID=" + txtUsuario.Text + "; Password=" + txtSenha.Text, "System.Data.SqlClient"));
//Salva a nova connectionString configFile.Save();
//Atualiza a nova seção (faz o aplicativo reler do HD a connectrionString se for utilizada novamente ConfigurationManager.RefreshSection("connectionStrings");
//Atualiza a seção do appSettings também ConfigurationManager.RefreshSection("appSettings"); } else { lblStatus.Text = conn.ConnectionString; } } }}
Allan Roberto
Curtir tópico
+ 0
Responder
Posts
30/09/2010
Allan Roberto
// Referência ao arquivo de configuração do o aplicativo.System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);// Uma seção connectionStrings.ConnectionStringsSection csSection = config.ConnectionStrings;// Adiona string de conexão à seçãocsSection.ConnectionStrings.Add(new ConnectionStringSettings("Nome", "String de conexão aqui", "Nome do Provider"));// Grava.config.Save(ConfigurationSaveMode.Modified);
Responder
Clique aqui para fazer login e interagir na Comunidade :)