domingo, 25 de julho de 2010

Informações Centralizadas - Web.Config

Oi galera, tudo certo?

Este post é sobre a utilização do Web.Config do Asp.Net  para especificar valores que serão "enxergados" por toda a aplicação.

Sei que é um assunto saturado pra muitos, mas fiz este post  porque tenho feito manutenção em alguns sistemas em Asp.Net com C# e  percebido que há informações perdidas na aplicação, como referência à strings de conexão com o banco(à mesma string), mas sempre declaradas. Se há mudança de senha ou usuário de banco, se faz necessária a mudança em muitos arquivos, o que não é considerado uma boa prática.

Tenho percebido esta falha ou má prática principalmente em programadores que estão iniciando em programação ou eram de outras linguagens Web e estão indo para o Asp.Net.

Vamos a um exemplo simples:

C#

SqlConnection conexao = new SqlConnection("Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;");


string sql = "SELECT * FROM minhaTabela";
conexao.Open();
SqlCommand cmd = new SqlCommand(sql, conexao);

SqlDataReader dr = cmd.ExecuteReader();

conexao.Close();


Vejo a declaração à string destacada em vermelho em muitos arquivos .cs de aplicações. Se é necessário alterar esta string, é necessário mudar em todos os arquivos, sendo que a mesma string poderia ser especificada uma única vez, no Web.Config e chamada toda vez que se necessitasse.

No Web.Config existe a seção <connectionStrings> , própria para se especificar strings de conexão. Mas, neste exemplo específico não vou utilizá-la, porque o objetivo  não é  incentivar a centralização somente de strings de conexão, mas de qualquer coisa que seja utilizada em toda aplicação.

No Web.Config existe a seção <appSettings>na qual podemos especificar chaves com seus respectivos valores, como abaixo:


Web.Config

<appSettings>


<add key="StringConexao" value="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword">

</appSettings>
 
 
Toda vez que precisarmos fazer referência à string de conexão, não declararemos  uma nova string, mas referenciaremos a chave "StringConexao" que está no Web.Config, em AppSettins, como abaixo:.
 
C#
 
SqlConnection conexao = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings.Get("StringConexao").ToString());


conexao.Open();
string sql = "SELECT * FROM minhaTabela";
SqlCommand cmd = new SqlCommand(sql, conexao);

SqlDataReader dr = cmd.ExecuteReader();

conexao.Close();
 
Perceba que a string especificada foi o valor contido na chave "StringConexao" do Web.Config.
 
Quer mudar a string de conexão agora? Muda apenas no Web.Config ;). Uma única vez :)
 
Espero que seja útil de alguma forma aos que estejam bem no início da sua caminhada em Asp.Net com C#.
 
Abraços a todos

1 comentários:

  1. Parece brincadeira, mas quando assumi o dpto de tecnologia da agência que trabalho além desses eventuais problemas de não utilizarem o Web.Config de forma clara ainda tinha uma falta de padrão na linha de desenvolvimento enorme.
    Existinham várias formas de conexões e formas de desenvolvimento precisamos padronizar o mais rápido possivel.

    Seria bacana escrever sobre padronização e arquitetura. Pense nisso!

    ResponderExcluir