Criando classe para multiplas conexões (connection string) em ASP.NET C#

(Creating class for multiple connections, connection string,  in ASP.NET C #)

Olá, caros webianos!

Atendendo ao incentivo de Cecilia, irei criar mais post’s para o blog.

A ideia deste artigo é criarmos uma classe onde possamos escolher qual conexão iremos usar na aplicação. Teremos assim varios ConnectionString.
Já estou imaginando ai na sua mente a primeira pergunta! Quando será necessario usar varias connectionString?

Não é sempre que vc irá usar várias ConnectionString, somente em alguns casos que eu indico, tais como:

1. Acesso em dois banco de dados distintos.
2. Acesso de banco em dois servidores distintos.
3. Aprimorar o nivel de segurança do seu site.
4. Load Balance de acesso manual.

Vou explicar agora cada caso:

1. Acesso em dois banco de dados distintos.
Imagine a seguinte situação: Uma loja de peças te contratou para criar um e-commerce(loja online).
A loja já possui seu sistema funcionando perfeitamente, porém vc não quer misturar os dois projetos num so banco de dados. Assim vc cria seu proprio banco. Ficando no servidor dois bancos: “banco_desktop” e “banco_online”.  Supondo que o sistema de e-commerce é quase independente, só precisará controlar o estoque de peças, que está no banco_desktop.
Desta forma vc teria duas connectionString no seu projeto, uma para acessar o banco_desktop e outra para acessar seu sistema (banco_online).

Outro exemplo, seria uma migração de sistema. Vc tem um sistema antigo funcionando e esta desenvolvendo um novo sistema. Neste novo sistema tera seu proprio banco de dados. Porem até concluir 100% do desenvolvimento vc precisará acessar dados do antigo sistema. Use assim duas connectionString.

Mais um exemplo: Imagine uma escola com varios alunos. Cada novo semestre vc faz um processo para “zerar”/backup do banco. Evitando sua aplicação acessar diariamente os dados dos semestres antigos inchados no banco. Assim vc cria uma copia do banco com outro nome, para acessos se necessario em algum semestre estudado do aluno. Teria desta forma varios bancos ao longe dos anos. Ficando assim: “escola_2008_1s”,”escola_2008_2s” e”escola_2009_1s” (banco atual).

2. Acesso de banco em dois servidores distintos.
Os mesmos exemplos citados no item 1, porem os bancos estariam em servidores diferentes.

3. Aprimorar o nivel de segurança do seu site.
Muitas pessoas criam um usuario de banco para desenvolver sua aplicação e trata as permissões de acesso ao sistema somente por aplicação. Eu indico usar este controle de segurança tambem via  banco de dados. Não precisa criar um usuario de banco para cada usuario de aplicação. Crie um usuario de banco para cada categoria do sistema, pois as categorias possuem o mesmo nivel de permissão e acesso.

4. Load Balance de acesso manual.
Normalmente os desenvolvedores criam um unico usuario de banco para aplicação acessar o banco. Porém dependendo da quantidade de acesso isso pode gerar sobrecarga e serios problemas de desenpenho. Se sua aplicação for uma plataforma com sub-aplicações use um usuario para cada modulo do seu sistema. Desta forma o modulo de financeiro não prejudica (concorrencia)  com outro modulo, por exemplo modulo de Rh que terá um grande processamento quando for gerar folha de pagamentos dos funcionarios.

Se vc tem um site muito acessado tambem aconselho criar varios usuarios, sugiro uma media de 150 usuarios simultaneo por connectionString.

Exemplificando: Imagine um site com 20mil acessos diarios, gerando aproximadamente 500 usuarios simultaneos. Neste caso sugiro criar 4 connectionString (500/150) e fazer um sorteio aleatorio de uso destas pela aplicação.

Escrevi muito, agora vamos ver na pratica.

Abra o Visual Studio, file > new > website … > ASP.NET  WEb Site.
Em location use File System, e coloque o nome do seu “website”, por default vem escrito “website1”. Se quiser pode deixar assim.
Em Language usaremos Visual C#.

Depois que o projeto estiver aberto, vá em “Solution Explorer“.

A. Criando Classe cConn.cs:
Clique com botão direito sobre “App_DATA” (ou qualquer lugar do box), e escolha “Add new Item“. Escolha item “Class“. Coloque o nome de “cConn.cs“, language C#.

– Se aparecer uma caixa de dialogo* perguntando se deseja criar a pasta “App_code”, pode clicar em “Sim”. Seu sistema ficará mais organizado.
* you are attempting add a class to an ASP.NET application. For a class to be generally consumable in your site, it should be placed inside the ‘App_Code’ forder. Would yout like to place the class in the ‘App_code’ folder?

1. Acrescente o using System.Data.SqlClient; Para termos acesso aos metodos/objetos desta classe.
2. Crie um field: public string connString;
3. Crie um field(“pre instancia”): public SqlConnection Conn;
4. Crie um metodo cOpen.
Seu arquivo cConn.cs, ficara assim:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace myproject.db
{
/// <summary>
/// Summary description for cConn
/// </summary>
public class cConn
{
public void cOpen(string banco)
{
switch (banco)
{
case “desktop“:
connString = ConfigurationManager.ConnectionStrings[“Conn.db.desktop“].ToString();
break;
case “online“:
connString = ConfigurationManager.ConnectionStrings[“Conn.db.online“].ToString();
break;
}
Conn = new SqlConnection(connString);
Conn.Open();

}

}
}

B. Abra o arquivo Web.config:

O arquivo xml web.config é usado para colocar as informações de configuração da sua aplicação, tais como: cultura, string de conexão, páginas de erro, trace, modo de compilação e etc.

Ele vem com as informações iniciais. Não usaremos neste artigo todas as configurações dele, iremos usar somente: <connectionStrings>. Assim sendo, sugiro limpar as coisas que não for usar para não te confundir.

Seu arquivo web.config tem que ficar assim: (lembre de colocar o data source, initial catalog, user id e password do seu banco)
<?xml version=”1.0″?>
<configuration>
<appSettings/>
<connectionStrings>
<add name=”Conn.db.desktop” connectionString=”Data Source=db.loja.com.br;Initial Catalog=lojadesktop;User ID=lojadesktop;password=!loj@d3skt9p” providerName=”System.Data.SqlClient”/>
<add name=”Conn.db.online” connectionString=”Data Source=db.webmaicon.net;Initial Catalog=lojaonline;User ID=lojaonline;password=!l0j@onl!n3″ providerName=”System.Data.SqlClient”/>
</connectionStrings>
</configuration>

C. Usando minha Classe:
Vc pode usar esta classe dentro de outra classe ou na propria pagina, basta instanciar um objeto desta classe e usar.

cConn conn = new cConn();
conn.cOpen(“desktop“);

Lembre que vc precisa usar using myproject.db, para ter acesso a classe cConn.

D. Load Balance de acesso manual Aleatorio:
Vamos testar com multiplos usuarios acessando o mesmo banco e servidor. É muito simples.
No web.config:
<add name=”Conn.db.online1″ connectionString=”Data Source=db.webmaicon.net;Initial Catalog=lojaonline;User ID=lojaonline1;password=!l0j@onl!n3″ providerName=”System.Data.SqlClient”/>
<add name=”Conn.db.online2″ connectionString=”Data Source=db.webmaicon.net;Initial Catalog=lojaonline;User ID=lojaonline2;password=!l0j@onl!n3″ providerName=”System.Data.SqlClient”/>
<add name=”Conn.db.online3″ connectionString=”Data Source=db.webmaicon.net;Initial Catalog=lojaonline;User ID=lojaonline3;password=!l0j@onl!n3″ providerName=”System.Data.SqlClient”/>
<add name=”Conn.db.online4″ connectionString=”Data Source=db.webmaicon.net;Initial Catalog=lojaonline;User ID=lojaonline4;password=!l0j@onl!n3″ providerName=”System.Data.SqlClient”/>

No cConn.cs:
Acrescentei Randow, Classe que faz sorteio aleatório.
public void cOpen(string banco)
{
switch (banco)
{
case “desktop”:
connString = ConfigurationManager.ConnectionStrings[“Conn.db.desktop”].ToString();
break;
case “online”:
Random rand = new Random();
connString = ConfigurationManager.ConnectionStrings[“Conn.db.online”+rand.Next(1, 5)].ToString();
break;
}
Conn = new SqlConnection(connString);
Conn.Open();

}

Webianos, é isso ai!!! bom uso, e se tiver alguma dúvida deixe seu comentario com email para eu responder.

Um comentário sobre “Criando classe para multiplas conexões (connection string) em ASP.NET C#

  1. Sergio Murilo disse:

    Olá!
    Achei muito interessante o post, mas não atendeu ao que procurei. Seguinte: sou novato em programação C# e resolvi fazer um projeto para conexão a banco e execução de sentenças SQL (select apenas, utilizando join). Sem segredos, até que resolvi colocar opção para selecionar bases de outra máquina. Consegui a conexão nativa desde que meu usuário de rede esteja em ambas máquinas. Como enviar na connection string para que pegue usuário padrão de autenticação do SQL Server (sysdba) ao invés de pegar pelo domínio e usuário de rede? A intenção é listar as bases disponíveis na estação escolhida (informado no txtNomeEstacao).

    Segue pedaço do fonte:

    dbConn.ConnectionString = “Data Source=” + txtNomeEstacao.Text + “;Initial Catalog=master;Integrated Security=True;WorkStation ID=”+txtNomeEstacao.Text+”;User ID=sysdba;password=masterkey”;
    SqlCommand dbCmd = new SqlCommand(“Select Name From sys.databases”,dbConn);
    SqlDataAdapter adpBases = new SqlDataAdapter(dbCmd);
    DataTable dtBases = new DataTable();
    dbConn.Open();
    adpBases.Fill(dsB);

    Grato pela atenção!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s