Usuário com melhor resposta
Como alterar o Arquivo app.Config gerado pelo C# ?

Pergunta
-
Olá, tem como alterar o arquivo app.config via codigo?
Por exemplo configura a string de conexao em desenvolvimento, mas quando chegar na base real o nome do servidor e dos usuarios serao outros alem do que uns saem outros entram preciso alterar a string de maneria seguinte:
Caso a conexao falhe pelo nome do servidor naum existir coloco uma tela para o usuario informar o nome da base:
Testo pra saber se o nome existe
e Gravo no app.config para naum mais precisar pegar ate q um dia o usuario vai instalar novamente (o Sql Server por N motivos) e vai colocar o nome no servidor do seu time do coração e ai na primira entra novamente vou pedir pra que informe o nome do glorioso(servidor).
Obrigado desde ja.
Respostas
-
Ola, Clodoaldo
Bom abaixo estou mostrando um arquivo app.conf que eu so sempre:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="caminhobanco" value="C:\Projetos\DotNet\SisCop\Database\" />
<add key="caminhoreport" value="C:\Projetos\DotNet\SisCop\SisCop\Relatorios\"/>
<add key="logoreport" value="file:C:\Projetos\DotNet\SisCop\SisCop\Imagens\"/>
</appSettings>
</configuration>
Onde:
Chave => caminhobanco (KEY)
Valor da Chace = C:\Projetos\DotNet\SisCop\Database\ (VALUE)
Agora esse que vc passou agora me pegou viu o que vc pode tentar fazer é o seguinte:
Digamos que o conteudo da palavrana NAME seria sua chave e o conteudo da palavra connectionString seria seu value pode tentar fazer isso pode ser que de certo, lembrando que é um "chute" isso rsss
Blza qualquer coisa estamos ai
Junior- Marcado como Resposta ClodoaldoPereira domingo, 21 de fevereiro de 2010 20:31
-
Ola
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="StrCone"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Confesso naum saber onde ta a chave ai... ou melhor quem é chave
Naquele código que te passei, vc só coloca StrCone que é o nome de sua string de conexão.
Pode executar aquele código q vai funcionar, ele só nao vai mudar o app.config do seu projeto, pois ele é copiado para o diretorio Debug quando vc roda seu projeto, ai a mudança ocorre dentro daquele diretorio.
Se sua pergunta foi respondida por favor marque a resposta como certa.- Marcado como Resposta ClodoaldoPereira domingo, 21 de fevereiro de 2010 20:30
Todas as Respostas
-
Aqui tem um post explicando isto.
Vc utiliza para isto a classe System.Configuration.
http://chiragrdarji.wordpress.com/2008/09/25/how-to-change-appconfig-file-run-time-using-c/
Se sua pergunta foi respondida por favor marque a resposta como certa.- Sugerido como Resposta wallybh sábado, 20 de fevereiro de 2010 12:56
-
-
-
Tenta assim:
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings["minhaStringdeConexao"].ConnectionString = "Data Source=.\\Novo local;Initial Catalog=BasedeTeste;Integrated Security=True";
config.Save(System.Configuration.ConfigurationSaveMode.Modified);
System.Configuration.ConfigurationManager.RefreshSection("appSettings");
Vc deve usar a classe System.Configuration.Configuration para modificar as chaves e valores do app.config
Se sua pergunta foi respondida por favor marque a resposta como certa.- Sugerido como Resposta wallybh sábado, 20 de fevereiro de 2010 12:56
-
Ishiii
Object reference not set to an instance of an object.
config.ConnectionStrings.ConnectionStrings["minhaStringdeConexao"].ConnectionString = "Data Source=.\\Novo local;Initial Catalog=BasedeTeste;Integrated Security=True"; // deu esse erro aqui
Esse é o meu arquivo app.config
<?
xml version="1.0" encoding="utf-8" ?>
<
configuration>
<
configSections>
</
configSections>
<
connectionStrings>
<
add name="Controles_Testes.Properties.Settings.BasedeTesteConnectionString"
connectionString="Data Source=CLODOALDO\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"
providerName="System.Data.SqlClient" />
</
connectionStrings>
</
configuration>
Naum sei onde errando
Naum sei onde errandoconfiguration>
Naum sei onde errando -
Olá Clodoaldo,no código do app.config que vc passou a sua connection string está com o seguinte nome:
<add name="Controles_Testes.Properties.Settings.BasedeTesteConnectionString"
O erro foi por causa desse nome. Vc tem q colocar o nome da connection String corretamente no método em que você altera o seu valor.Ficaria assim:config.ConnectionStrings.ConnectionStrings["Controles_Testes.Properties.Settings.BasedeTesteConnectionString"].ConnectionString = "Data Source=.\\Novo local;Initial Catalog=BasedeTeste;Integrated Security=True";
Sugiro que troque esse nome, está muito grande e pode dificultar um pouco as coisas futuramente. -
Mais uma vez sem sucesso, acho que eu to marcando em algo simples, alterei o nome fiz como meu amigo Dan ensinou mas quando volto em modo de desing e abro dentro do VS2008 o app.config ele permanece inalterado ou seja como se os comandos
config.Save(System.Configuration.ConfigurationSaveMode.Modified);
System.Configuration.ConfigurationManager.RefreshSection("appSettings");
nao tivessem efeito algum sera q ta falatando alguma coisa? -
Clodoaldo,provavelmente está funcionando sim. Acontece que quando vc compila sua aplicação ela é executada em outro diretório. Se vc estiver debugando o app.config alterado vai estar em {Diretório da solução}\bin\Debug ou se não estiver debugando vai estar em {Diretório da solução}\bin\Release. Acesse esse diretório e veja se o app.config foi alterado.
-
Ola vc pode desenvolver em sua aplicação uma area de configurações onde vc pode alterar seu app.conf, que na minha opinião fica mais elegante e profissional, em geral eu faço o seguinte:
Adicione em uma classe por exemplo ess biblioteca
using System.Configuration;
Eu criei dois metodos um para gravar no App.Conf e outra para ler o arquivo
public static void GravarConfiguracao(string chave, string valor)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings.Remove(chave);
config.Save();
config.AppSettings.Settings.Add(chave, valor);
config.Save();
}
public static string LerConfiguracao(string chave)
{
return System.Configuration.ConfigurationManager.AppSettings[chave].ToString();
}
Dentro da minha aplicação eu crio um form que utilizo para ler e gravar dados no arquivo app.conf como por exemplo caminho de imagens, caminho de relatorios, geração de arquivos, configurações do Banco de Dados (sempre criptografo a senha para usar nos arquivos app.conf)
E no form de login do sistema sempre faço um tratamento de erro pois se o sistema não encontrar o Banco de Dados eu mostro um aviso ao usuario e em seguida abro um form de configuração onde passo as configurações do Banco de Dados e gravo no arquivo app.conf apos gravar as informações no arquivo app.conf o usuario abre o sistema novamente e o acesso ao Banco de Dados ja estará configurado.
Dessa forma fica um esquema bem profissional e organizado lebrando sempre que ao gravar dados de senha no app.conf eu sempre criptografo a senha no arquivo.
Espero ter ajudado
Abs.
Junior -
Ola
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="StrCone"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Confesso naum saber onde ta a chave ai... ou melhor quem é chave -
Ola, Clodoaldo
Bom abaixo estou mostrando um arquivo app.conf que eu so sempre:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="caminhobanco" value="C:\Projetos\DotNet\SisCop\Database\" />
<add key="caminhoreport" value="C:\Projetos\DotNet\SisCop\SisCop\Relatorios\"/>
<add key="logoreport" value="file:C:\Projetos\DotNet\SisCop\SisCop\Imagens\"/>
</appSettings>
</configuration>
Onde:
Chave => caminhobanco (KEY)
Valor da Chace = C:\Projetos\DotNet\SisCop\Database\ (VALUE)
Agora esse que vc passou agora me pegou viu o que vc pode tentar fazer é o seguinte:
Digamos que o conteudo da palavrana NAME seria sua chave e o conteudo da palavra connectionString seria seu value pode tentar fazer isso pode ser que de certo, lembrando que é um "chute" isso rsss
Blza qualquer coisa estamos ai
Junior- Marcado como Resposta ClodoaldoPereira domingo, 21 de fevereiro de 2010 20:31
-
Ola
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="StrCone"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=BasedeTeste;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
Confesso naum saber onde ta a chave ai... ou melhor quem é chave
Naquele código que te passei, vc só coloca StrCone que é o nome de sua string de conexão.
Pode executar aquele código q vai funcionar, ele só nao vai mudar o app.config do seu projeto, pois ele é copiado para o diretorio Debug quando vc roda seu projeto, ai a mudança ocorre dentro daquele diretorio.
Se sua pergunta foi respondida por favor marque a resposta como certa.- Marcado como Resposta ClodoaldoPereira domingo, 21 de fevereiro de 2010 20:30
-
VAleu Julio , VAleu Dani....
Só uma coisa quando do projeto copilado ele vai salvar o arquivo????
Pois q senão vai ser um saco toda vez que o usuario entrar e ter que informar o nome do servidor e o banco de dados o usuario vai atirar o monitor pela janela e chamar este aqui de BURRO né.
Eu preciso que o procedimento salve o arquivo para q na proxima entrada o usuario informe apenas a senha dele
Muito Obrigado pela ajuda ate aqui -
VAleu Julio , VAleu Dani....
Só uma coisa quando do projeto copilado ele vai salvar o arquivo????
Pois q senão vai ser um saco toda vez que o usuario entrar e ter que informar o nome do servidor e o banco de dados o usuario vai atirar o monitor pela janela e chamar este aqui de BURRO né.
Eu preciso que o procedimento salve o arquivo para q na proxima entrada o usuario informe apenas a senha dele
Muito Obrigado pela ajuda ate aqui -
Ola
Só por questões de entendimento pois para mim não ficou claro sobre a questão de gravar os dados do arquivo app.conf.
Bom primeiro quando se desenvolve uma rotina desse tipo tem-se que ja fazer todo o esquema de gravação dentro do arquivo para que na proxima entrada no sistema este ja esteja todo configurado. Isso é uma questão importantissima pois como foi dito o usuario ficaria doido com isso.
Ate no post acima onde enviei um codigo onde se faz a leitura e gravação do arquivo ja é para suprir esse problema então se tem leitura e gravação no arquivo, outro ponto senhas lembrar de criptografa-las isso é importantissimo e mais um ponto desenvolver uma interface amigavel e de facil utilização pelo usuario na configuração de acesso ao sistema ou melhor uma interface onde com algum suporte do desenvolvedor o usuario final possa fazer a configuração necessário para o sistema funcionar.
Quando cito a interface amigavel digo uma tela de facil uso e todo o tratamento de erro dentro do form de entrada para que este de acordo com erro guie o usuario até uma area de configuração.
Quando o projeto é compilado o sistema usa o arquivo app.conf que fica dentro do diretorio BIN do projeto.
Abs.
Junior