Você está na página 1de 8

http://www.macoratti.net/adn_bpu1.

htm

Confuso com tantos conceitos novos, com tantas siglas e acrsticos ? Qual provedor usar ? Devo usar DataSet ou DataReader ? Se essas e outras dvidas te atormentam, voc chegou ao artigo certo. Espero que aps terminar a leitura pelo menos metade das suas dvidas estejam resolvidas ou encaminhadas. Esse objetivo deste artigo. Antes vou lanar os fundamentos da ADO.NET para quem esta chegando agora.

Afinal o que ADO.NET e o que ela tem a ver com o Visual Basic ?
ADO.NET

um conjunto de assemblies que fazem parte da .NET Framework e que permitem a comunicao com os bancos de dados realizando operaes de leitura e atualizao. Para realizar esta tarefa a ADO.NET tem vrios 'Clientes' de fonte de dados os quais se encontram no espao de nomes - namespace - System.Data. Assim temos:

System.Data.SqlClient - permite o acesso ao banco de dados SQL Server 7.0 ou superior; System.Data.OleDb - permite o acesso a qualquer outra fonte de dados exceto(no recomendado) para o SQL Server 7.0 ou superior; System.Data.Oracle - permite o acesso ao banco de dados Oracle.

Quais so os componentes bsicos da ADO.NET ?


Como j disse anteriormente a ADO.NET possui diversos clientes logo teremos um componente para cada cliente. Assim temos:

Nota: Para simplificar listei somente os componentes do SqlClient e OleDb Note

que temos um componente SqlConnection e OleDbConnection em ambos os clientes para a conexo, um componente SqlCommand e OleDbCommand para o objeto Command e assim por diante.

Qual o componente mais importante do ADO.NET ?


Na verdade todos os componentes so importantes pois esto interrelacionados e funcionam em harmonia para atingir um objetivo. Dentre eles o componente que deve ser usado em primeiro lugar o objeto XXXConnection pois a primeira coisa que devemos fazer antes de qualquer outra atividade efetuar a conexo com a fonte de dados.

O que significa criar uma conexo com uma fonte de dados ?


Criar

uma conexo com uma fonte de dados significa usar o componente apropriado e fornecer informaes ao componente para que ele possa encontrar a base de dados e poder acessar informaes a partir dela. Como exemplo, vamos supor que voc deseja criar uma conexo com um banco de dados SQL Server que esta instalado na sua mquina local e acessar o banco de dados Northwind. Neste caso voc deve informar o seguinte:

Usar o provedor de dados SQL Server .NET Data Provider do namespace System.Data.SqlClient O nome do servidor onde esta a base de dados O nome da base de dados O nome do usurio e a senha

Nota: O namespace System.Data.SqlClient dever ser declarado via imports no incio do cdigo.

Como exemplo de conexo deste acesso temos o seguinte cdigo: Dim conexao as String strconexao = "data source=localhost;" & _ "initial catalog=Northwind" & _ "integrated security=SSPI;" Dim conexao as SqlConnection = New SqlConnection(strconexao)

O que so adaptadores e como funcionam ?


Os

adaptadores(objeto DataAdapter) esto encarregados de chamar os comandos de leitura, atualizao, incluso e excluso de informaes em uma fonte de dados. Com base nesta informao chegamos a concluso que cada Adaptar dever ter:

Uma conexo para saber de onde ir acessar os dados Um comando Select : para saber quais dados acessar Um comando Insert : para saber quais dados incluir Um comando Update : para saber quais dados por atualizar Um comando Delete : para saber quais dados pode excluir

O cdigo exemplo que cria um Adaptador para o SQL Server usando a conexo acima criado o seguinte :

Dim da As SqlDataAdapter = New SqlDataAdapter("Select * from Clientes, conexao) A linha de cdigo acima cria uma instncia do Adaptador e atribui ao SelectCommand uma sentena SQL que l todos os registros da tabela Clientes. (O resultado obtido com o SelectCommand pode ser usado para preencher um DataReader ou um DataSet.) Os comandos possuem a funo que pode ser chamada para que um comando seja executado; podemos ainda informar que dados desejamos receber. Assim, se desejamos executar um procedimento armazenado sem receber nenhum valor usamos: ExecuteNonQuery. Se desejamos receber um valor usamos: ExecuteScalar. Abaixo o cdigo exemplo que retorna um valor para a varivel valor:

Dim valor as String = da InserCommand.ExecuteScalar


Abaixo o cdigo exemplo que no retorna valor algum:

da DeleteCommand.ExecuteNonQuery

O que so os objetos Commands e como funcionam ?


Podemos

ter basicamente 4 comandos : Select, Update, Insert e Delete.

Cada comando possui uma sentena SQL que dir ao Adaptador(DataAdapter) como realizar a respectiva tarefa. Para realizar tarefas simples usando sentenas SQL podemos usar o objeto CommandBuilder que funciona como um construtor automtico dos comandos SQL bsicos. Exemplo:

Dim comandoBuilder As SqlComandBuilder = New SqlCommandBuilder(da) Com a linha de cdigo acima criamos os comandos : Insert, Update e Delete para o Adaptador da. Vamos juntar os trechos de cdigos j escritos para obter o cdigo completo para preencher um DataSet com todos os dados da tabela Clientes da base de dados Northwind do SQL Server 2000: Dim conexao as String strconexao = "data source=localhost;" & _ "initial catalog=Northwind" & _ "integrated security=SSPI;" Dim conexao as SqlConnection = New SqlConnection(strconexao) Dim da As SqlDataAdapter = New SqlDataAdapter("Select * from Clientes, conexao) Dim comandoBuilder As SqlComandBuilder = New SqlCommandBuilder(da) Dim ds As DataSet da.Fill(ds,"Clientes")

Qual Provedor de dados .NET Framework eu devo usar ?


Todos queremos obter um melhor desempenho para nossas aplicaes. Principalmente as aplicaes com acesso a base de dados. Para alcanar o melhor desempenho para sua aplicao com acesso a dados voc deve usar o provedor de dados .NET mais adequado para a sua fonte de dados. Como existem diversas opes de provedores de dados disponveis na .NET Framework oriente-se pela tabela abaixo para encontrar qual provedor de dados usar para sua fonte de dados e assim obter um melhor desempenho:

Provedor .NET
SQL Server .NET Data Provider

Detalhes
Localizado no namespace System.Data.SqlClient

Recomendado para aplicaes em 3 camadas usando como ban version 7.0 ou superior. Recomendado para aplicaes em uma camada usando o Micro o Microsoft SQL Server 7.0 ou superior. Para usar o Microsoft SQL Server verso 6.5 e anterior voc de for SQL Server com o OLE DB .NET Data Provider.

OLE DB .NET Data Provider Localizado no namespace System.Data.OleDb. ODBC .NET Data Provider

Recomendado para aplicaes em 3 camadas usando o Microso anterior, ou, qualquer provedor OLE DB que suporta a interface Interfaces Used by the OLE DB .NET Data Provider no .NET Fram Recomendado para aplicaes em uma camada usando o banco Access.(A utilizao do banco de dados Microsoft Access para no recomendado.) Para acesso usando ODBC - Open Database Connectivity - exist ODBC .NET disponvel para download aqui. (O provedor j esta .NET Framework) Nota: O suporte para o provedor OLE DB para ODBC (MSDASQ

Localizado no namespace Microsoft.Data.Odbc. (a partir da verso 1 Para a verso anterior do.NET Framework (1.0) o provedor pode ser b Fornece acesso a fonte de dados que so conectados via driver somente quando no houver outra alternativa de conexo com

.NET Data Provider for Oracle

Localizado no namespace System.Data.OracleClient (a partir da ver Para a verso anterior do .NET Framework (1.0) o provedor pode ser b

Fornece acesso a base de dados Oracle(verso 8.1.7 e superior

.NET Data Provider Personalizado

ADO.NET fornece um conjunto mnimo de interface que lhe perm provedor de acesso a dados .NET. Para maiores informaes ve .NET Data Provider.

SQLXML Classes gerenciadas

O Microsoft SQL Server 2000 (SQLXML 3.0) contm classes SQ permitem a voc acessar a funcionalidade XML do Microsoft SQ Essas classes permitem executar modelos XML, , realizar consu Path Language (XPath) sobre dados no servidor, ou realizar atu Updategrams ou Diffgrams. SQLXML 3.0 esta disponvel para download: download.

Resumindo:

Vai Acessar uma fonte de dados


SQL Server 7.0 ou superior (2000,2005) ou MSDE Oracle MS Access ou SQL Server 6.5 ODBC (DBF, Dbase, Paradox,etc...)

USE o seguinte namespace


System.Data.SqlClient System.Data.OracleClient System.Data.OleDb Microsoft.Data.Odbc

Use o seguinte Provedor


SQL Server .NET Data Provider NET Data Provider for Oracle OLE DB .NET Data Provider ODBC .NET Data Provider (*)

(*) Utilize ODBC somente em ltimo caso.

Como trabalhar com DataReaders, DataSets, DataAdapters, e DataViews ?

ADO.NET, at a verso 1.1, fornecia dois objetos para retornar e armazenar dados em memria: DataSet e DataReader. DataReader - Fornece um acesso conectado somente-leitura e somente-parafrente a uma fonte de dados. DataSet - Fornece um representao relacional em memria de dados , sendo um conjunto completo de dados que incluem tabelas que contm dados, restries de dados e relacionamentos entre as tabelas. O acesso desconectado. - Quando voc usa um DataSet frequentemente voc tambm usa um DataAdapter (e possivelmente um CommandBuilder) para interagir com sua fonte de dados. - Quando voc usa um DataSet voc pode empregar um DataView para aplicar ordenamento e filtragem nos dados do DataSet. - O DataSet tambm pode ser herdado para criar um DataSet fortemente tipado com o objetivo de expor tabelas, linhas e colunas como propriedades de objetos fortemente tipados.

Afinal DataSet ou DataReader ?


Para decidir se voc deve usar um DataSet ou um DataReader em sua aplicao de acesso a dados, voc deve considerar o nvel de funcionalidade que vai precisar usar na sua aplicao.

Voc deve usar um DataSet em sua aplicao quando:


voc

precisar trabalhar com mais de uma tabela de dados simultaneamente. Voc precisar de navegao entre mltiplas tabelas de resultados. voc precisar manipular dados de mltiplas fontes: banco de dados , arquivos XML, arquivos textos, planilhas eletrnicas, etc... voc precisar trocar dados entre camadas ou usar um Web Service XML. voc precisar reutilizar o mesmo conjunto de linhas para alcanar desempenho atravs de cache de dados (via ordenao, busca ou filtro de dados) voc precisar efetuar uma grande quantidade de processamento por linha. voc precisar manipular dados usando operaes XML como XLST ou consultas XPath.

Voc deve usar um DataReader em sua aplicao quando:


Voc

precisar trabalhar somente com uma tabela de dados por vez voc no precisar usar cache de dados voc precisar somente exibir os dados de uma tabela voc precisar acessar de forma rpida e de uma vez os dados de uma forma somente-leitura e somente-para-frente voc precisar processar uma quantidade de dados muito grande para caber na memria

Nota: O DataAdapter usa o DataReader par preencher o DataSet. Desta forma , o desempenho ganho pela utilizao do DataReader que voc salva na memria os dados que o DataSet ir consumir. Em resumo: utilize um DataReader sempre que voc puder, deixando a utilizao de um DataSet para os casos realmente necessrios.

Dicas para utilizar melhor o DataReader


O DataReader deve ser fechado antes de acessar qualquer parmetro de saida para um Command associado. Sempre feche o DataReader quando voc terminou de ler os dados. Se a conexo que voc esta usando usada somente para retornar o DataReader feche a conexo imediatamente depois de fechar o DataReader. O DataReader no pode ser trocado entre camadas pois foi criado para acesso a dados conectado. Somente um DataReader pode ser aberto de cada vez. Ao acessar os dados de uma coluna use os conectores tipados como GetString, GetInt32 ao invs de GetValue. Se voc estiver terminando de ler dados de um DataAdapter mas ainda tem uma grande quantidade de dados no lidos pendentes, use o comando Cancel no Command antes de efetuar o Close no DataReader. Se voc dar um close no DataReader isto provocar o retorno dos dados pendentes antes de fechar o cursor. Ao usar o Cancel no Command voc estar descartando os dados pendentes que o DataReader ainda no leu quando ele foi fechado.

Boas prticas para acesso a dados com ADO.NET


Abra conexes o mais tarde possvel e Feche as conexes o mais cedo possvel; Em operaes que envolvam alteraes de dados (UPDATE, INSERT, DELETE) em mais de uma tabela simultaneamente sempre utilize Transaes; De forma geral todas as tabelas devem possuir uma chave primria Ao montar instrues SQL d preferncia a utilizao de parmetros nas strings SQL e evite a concatenao de strings. Desta forma evita-se erros e ataques de injeo SQL. A utilizao de parmetros permite que o SGBD compile o cdigo SQL apenas uma vez; Ao utilizar o operador LIKE em instrues SQL a string usada na clusula o smbolo % e no o *. O correto : SELECT nome FROM tabela where nome like 'Mac%' Procure construir filtros e ordenaes diretamente na instruo SQL , usando as clusulas WHERE, ORDER e GROUP e no via cdigo; Procure evitar o uso do coringa (*) em instrues SQL com SELECT procurando nomear os campos que deseja obter da base de dados e sempre usando uma condio para evitar que todos os registros sejam selecionados. Evite : SELECT * from Tabela.

Você também pode gostar