ADO .NET - Recomendações para estratégia de acesso a dados
Se você esta iniciando o aprendizado ou migrando para a plataforma .NET pode estar confuso quando o assunto é acesso a dados. Motivos não faltam, afinal você tem a sua disposição diversas opções na plataforma .NET para realizar acesso a dados com classes e métodos distintos: DataSets, DataReaders, XML, TableAdapters, DataAdapter, Command, etc.
Diante de tantas opções, a dúvida em qual delas é a melhor escolha para a sua aplicação, é algo comum para os iniciantes e mesmo para quem já usa o plataforma .NET há algum tempo. Afinal o que seria mais recomendado para uma aplicação WIndows Forms ? DataSet ou DataRead ? E para uma aplicação Web que usa os Web Forms ?
Neste artigo pretendo apresentar as recomendações para estratégia de acesso a dados sugeridas pela Microsoft no artigo: http://msdn2.microsoft.com/en-us/library/8fxztkff(VS.71).aspx , e, assim, lançar um pouco de luz sobre este tema com o objetivo de ajudar a esclarecer(não esgotar) o assunto. Vamos lá...
Um pouco sobre ADO .NET
O modelo de acesso a dados usado pela ADO .NET pode ser resumido da seguinte forma:
Muito simples não é mesmo ? Para trabalhar com este modelo a ADO .NET fornece duas estratégias básicas:
Nota: O objeto DataReader é usado somente para leitura de dados de forma conectada e percorre os dados até o fim em um único sentido (forward-only) e no modo somente leitura (read-only). O DataReader consome menos recursos do que o dataset e oferece uma acesso mais rápido que o objeto dataset mas não pode efetuar alterações na fonte de dados original, sendo usado para acessar os dados de forma rápida e para apresentá-los sempre atualizados. |
Vantagens do modelo DataSet:
Vantagens do modelo de acesso direto:
Qual modelo devemos usar ? Em quais circunstâncias um modelo é mais indicado que o outro ?
Nota: De forma geral a recomendação para acesso a dados tem a seguinte premissa: Abrir a conexão o mais tarde e fechar o mais cedo possível. |
Em aplicações WIndows Forms você, quase sempre, deve usar um dataset:
Especificamente você deve usar os datasets nos seguintes cenários:
Você deve usar uma consulta TableAdatper ou comando de dados nos seguintes cenários:
DDL -Data Definition Language (DDL) - São usados para definir o esquema e estrutura do banco de dados, exemplos:
|
Em aplicações Web Forms você deve usar os comandos de dados para realizar operações e um DataReader para exibição de dados:
As páginas Web Forms e seus controles e componentes são recriados a cada vez que a página realiza uma ida e volta ao servidor de forma que não é muito eficiente criar e preencher um dataset a cada acesso , a menos que você deseje efetuar o cache de dados entre os round trips;
Especificamente você deve usar os datasets nos seguintes cenários:
Você desejar trabalhar com múltiplas tabelas separadas ou tabelas de diferentes fontes de dados;
Você desejar trocar dados com outra aplicação ou componente como um XML ou Web Service;
Você necessita realizar um processamento demorado com cada registro que obter da base de dados. (Se você usar um datareader nesta situação a conexão ficará aberta por um longo período de tempo afetando o desempenho da sua aplicação.)
Você precisa processar registros interdependentes como efetuar consultas em registros relacionados;
Você deseja realizar operações XML como transformações XSLT nos dados;
Um XML Web Service é criado e descartado a cada chamada com isso o modelo usado é geralmente o mesmo indicado para as página Web Forms. Note porém que os XML Web Services são objetos da camada do meio (middle-tier) e o seu objetivo é intercambiar dados com outras aplicações na web. Por isso...
Considere a utilização de um dataset se:
O XML Web Service envia e recebe dados;
Existir quaisquer um dos cenários indicados para a utilização de um dataset indicado para os web forms;
Use os comandos de dados e/ou um DataReader nos seguintes cenários:
O XML Web Service for retornar um valor escalar;
O XML Web Service esta realizando uma operação de não consulta como um comando DDL;
O XML Web Service esta chamando uma stored procedure;
Uma palavra final sobre a utilização de acesso a dados com Crystal Reports
A escolha do modo de acesso a dados com relatórios Crystal Reports em sua aplicação irá afetar a atualização do relatório e a sua distribuição.
Obter os dados de uma fonte conectada e os colocar diretamente no relatório : Usando este método os relatórios será afetados por quaisquer alterações irão exigir uma novo deploy do relatório;
Definir as tabelas e os campos usados no relatório, criar um dataset e passar para o relatório: Este método requer uma maior trabalho de configuração, definição de conexão com o banco de dados, execução de consultas contra o banco de dados e utilização do método SetDataSource;
A palavra final quanto a qual modelo usar envolve a escolha do visualizador(viewer):
O primeiro modelo cria um relatório no qual todas as definições da fonte de dados estão embutidas e pode ser usada com o viewer report para Windows ou Web;
O segundo modelo pode ser visualizado somente usando um programa desenhado para coletar e expor os dados contidos;
Este é um resumo básico que não contempla os novos recursos da ADO.NET Entity Framework e do LINQ.
Estamos conversados...
Referências:
http://www.microsoft.com/brasil/msdn/Tecnologias/adonet/DadosADONETSQL.mspx
ADO.NET - A arquitetura de dados desconectada e a concorrência de dados
http://blogs.msdn.com/data/archive/2007/04/28/microsoft-s-data-access-strategy.aspx
José Carlos Macoratti