msdn20_capa.JPG

Clique aqui para ler todos os artigos desta edição

 

Estratégia de Acesso a Dados no ADO.NET e SQL

por John Papa

Este artigo discute

Este artigo usa as seguintes tecnologias:

·          Pooling de conexões

·          Stored Procedures

·          Declaração de parâmetros

·          ExecuteScalar, ExecuteReader, DataSet

C# e SQL

 

Download:

 

Chapéu

ADO.NET e SQL

 

 

Quando sua meta for uma solução empresarial eficiente e escalável, você precisará desenvolver uma estratégia eficiente de acesso a dados. Você não pode apenas testar suas máquinas de produção e depender dos resultados. Embora um aplicativo possa exibir excelentes tempos de resposta para alguns usuários, é possível que haja problemas de desempenho quando a carga aumenta. Por isso, quando sou solicitado a executar revisões de código e de arquitetura, procuro vários modelos de codificação. Neste artigo, compartilharei algumas delas, já que estão relacionadas ao acesso a dados com o ADO.NET. Discutirei maneiras eficientes de implementar as conexões de banco de dados do ADO.NET de modo a aproveitar as vantagens dos pools de conexão e apresentarei dicas sobre como usar os vários objetos ADO.NET para abrir e fechar conexões e para gerenciar o estado da conexão para você. Discutirei também as conexões e o DataAdapter e DataReader, bem como stored procedures, consultas parametrizadas e ataques de injeção SQL.

 

Conexões ADO.NET

As conexões com os banco de dados são geralmente uma preocupação tardia, o que é surpreendente se considerarmos como elas são essenciais e como podem se tornar facilmente uma fonte de problemas e gargalos. Uma maneira de reduzir o número de conexões e o uso concomitante de seus recursos consiste em reutilizar as conexões por meio do pool de conexões. Para ser capaz de reutilizar uma conexão a partir de um pool, a string de conexão precisa corresponder à string de uma conexão de pool disponível. Cada pool de conexão é associado a uma string de conexão distinta, usando um algoritmo de correspondência exata. Se nenhuma correspondência exata for encontrada, será criada uma nova conexão, a qual será posteriormente incluída no pool.

A Listagem 1 mostra três exemplos de código que abrem uma conexão com o mesmo banco de dados, usando dois usuários diferentes. A primeira conexão é acessada pelo usuário SQL Server™ denominado TestUser1. Presumindo que não haja nenhuma conexão disponível no pool, essa conexão será criada do nada. Posteriormente, essa conexão será fechada e enviada para o pool de conexões. A segunda conexão é acessada por outro usuário SQL Server. A conexão desativada no pool não tem uma correspondência de string de conexão exata, já que os usuários são diferentes. Assim, a segunda conexão é criada do nada, fechada e enviada ao pool de conexões. Em seguida, é aberta uma terceira conexão pelo usuário SQL Server, denominada TestUser1. Existe uma conexão no pool que corresponde exatamente à string de conexão, por isso a conexão é recuperada do pool.

 

Listagem 1 Pooling de conexões

using(SqlConnection oCn = new SqlConnection(

    "Server=(local);Database=Pubs;User ID=TestUser1;Password=foo1;")) {

    oCn.Open();

    ...

}

 

...

Quer ler esse conteúdo completo? Tenha acesso completo