ADO.NET - Roteiro básico e Boas Práticas


Confuso com tantos conceitos novos, com tantas siglas e acrósticos ?
Qual provedor usar ?
Devo usar DataSet ou DataReader ?

Se essas e outras dúvidas te atormentam, você chegou ao artigo certo. Espero que após terminar a leitura pelo menos metade das suas dúvidas estejam resolvidas ou encaminhadas. Esse é objetivo deste artigo. Antes vou lançar 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 comunicação com os bancos de dados realizando operações de leitura e atualização.

Para realizar esta tarefa a ADO.NET tem vários 'Clientes' de fonte de dados os quais se encontram no espaço de nomes - namespace - System.Data. Assim temos:

Quais são os componentes básicos 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 conexão, 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 são importantes pois estão inter-relacionados 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 conexão com a fonte de dados.

O que significa criar uma conexão com uma fonte de dados ?

Criar uma conexão com uma fonte de dados significa usar o componente apropriado e fornecer informações ao componente para que ele possa encontrar a base de dados e poder acessar informações a partir dela.

Como exemplo, vamos supor que você deseja criar uma conexão com um banco de dados SQL Server que esta instalado na sua máquina local e acessar o banco de dados Northwind. Neste caso você deve informar o seguinte:

Nota: O namespace System.Data.SqlClient deverá ser declarado via imports no início do código.

Como exemplo de conexão deste acesso temos o seguinte código:

Dim conexao as String

strconexao = "data source=localhost;" & _
                        "initial catalog=Northwind" & _
                        "integrated security=SSPI;"

Dim conexao as SqlConnection = New SqlConnection(strconexao)

O que são adaptadores e como funcionam ?

Os adaptadores(objeto DataAdapter) estão encarregados de chamar os comandos de leitura, atualização, inclusão e exclusão de informações em uma fonte de dados.

Com base nesta informação chegamos a conclusão que cada Adaptar deverá ter:

O código exemplo que cria um Adaptador para o SQL Server usando a conexão acima criado é o seguinte :


Dim da As SqlDataAdapter = New SqlDataAdapter("Select * from Clientes, conexao)
 

A linha de código acima cria uma instância do Adaptador e atribui ao SelectCommand uma sentença 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 função 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 código exemplo que retorna um valor para a variável valor:


Dim valor as String = da InserCommand.ExecuteScalar
 

Abaixo o código exemplo que não retorna valor algum:


 da DeleteCommand.ExecuteNonQuery
 

O que são os objetos Commands e como funcionam ?

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

Cada comando possui uma sentença SQL que dirá ao Adaptador(DataAdapter) como realizar a respectiva tarefa.

Para realizar tarefas simples usando sentenças SQL podemos usar o objeto CommandBuilder que funciona como um construtor automático dos comandos SQL básicos. Exemplo:


 Dim  comandoBuilder As SqlComandBuilder = New SqlCommandBuilder(da)
 

Com a linha de código acima criamos os comandos : Insert, Update e Delete para o Adaptador da.

Vamos juntar os trechos de códigos já escritos para obter o código 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 aplicações. Principalmente as aplicações com acesso a base de dados.

Para alcançar o melhor desempenho para sua aplicação com acesso a dados você deve usar o provedor de dados .NET mais adequado para a sua fonte de dados. Como existem diversas opções de provedores de dados disponíveis 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 Detalhes
SQL Server .NET Data Provider Localizado no namespace System.Data.SqlClient
  • Recomendado para aplicações em 3 camadas usando como banco de dados o SQL Server version 7.0 ou superior.
  • Recomendado para aplicações em uma camada usando o Microsoft Data Engine (MSDE) ou o Microsoft SQL Server 7.0 ou superior.
  • Para usar o  Microsoft SQL Server versão 6.5 e anterior você deve usar o OLE DB Provider for SQL Server  com o OLE DB .NET Data Provider.
OLE DB .NET Data Provider Localizado no namespace System.Data.OleDb.
  • Recomendado para aplicações em 3 camadas usando o Microsoft SQL Server 6.5 ou anterior, ou, qualquer provedor OLE DB que suporta a interface OLE DB listada em OLE DB Interfaces Used by the OLE DB .NET Data Provider no .NET Framework SDK.
  • Recomendado para aplicações em uma camada usando o banco de dados Microsoft® Access.(A utilização do banco de dados Microsoft® Access para aplicações em 3 camadas não é recomendado.)
  • Para acesso usando ODBC - Open Database Connectivity - existe um provedor de dados ODBC .NET disponível para download aqui. (O provedor já esta incluído na versão 1.1 da .NET Framework)
  • Nota: O suporte para o provedor OLE DB para ODBC (MSDASQL) não esta mais disponível.
ODBC .NET Data Provider Localizado no namespace Microsoft.Data.Odbc. (a partir da versão 1.1 do .NET Framework).
Para a versão anterior do.NET Framework (1.0) o provedor pode ser baixado aqui: download
  • Fornece acesso a fonte de dados que são conectados via driver ODBC.(Deve ser usado somente quando não houver outra alternativa de conexão com a fonte de dados.)
.NET Data Provider for Oracle Localizado no namespace System.Data.OracleClient (a partir da versão 1.1 do .NET Framework).
Para a versão anterior do .NET Framework (1.0) o provedor pode ser baixado aqui: download.
  • Fornece acesso a base de dados Oracle(versão 8.1.7 e superior).
 .NET Data Provider Personalizado
  • ADO.NET fornece um conjunto mínimo de interface que lhe permite implementar seu próprio provedor de acesso a dados .NET. Para maiores informações veja o link: Implementing a .NET Data Provider.
SQLXML Classes gerenciadas
  • O Microsoft SQL Server 2000 (SQLXML 3.0) contém classes SQLXML gerenciadas que permitem a você acessar a funcionalidade XML do Microsoft SQL Server 2000 ou superior. Essas classes permitem executar modelos XML, , realizar consultas usando a linguagem XML Path Language (XPath) sobre dados no servidor, ou realizar atualizações usando o Updategrams ou Diffgrams.
  • SQLXML 3.0 esta disponível para download: download.

Resumindo:

Vai Acessar uma fonte de dados USE o seguinte namespace Use o seguinte Provedor
SQL Server 7.0 ou superior (2000,2005) ou MSDE System.Data.SqlClient SQL Server .NET Data Provider
Oracle System.Data.OracleClient NET Data Provider for Oracle
MS Access ou SQL Server 6.5 System.Data.OleDb OLE DB .NET Data Provider
ODBC (DBF, Dbase, Paradox,etc...) Microsoft.Data.Odbc ODBC .NET Data Provider (*)

(*) Utilize ODBC somente em último caso.

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

ADO.NET, até a versão 1.1, fornecia dois objetos para retornar e armazenar dados em memória: DataSet e DataReader.

DataReader - Fornece um acesso conectado somente-leitura e somente-para-frente a uma fonte de dados.

DataSet - Fornece um representação relacional em memória de dados , sendo um conjunto completo de dados que incluem tabelas que contém dados,  restrições de dados e relacionamentos entre as tabelas. O acesso é desconectado.

- Quando você usa um DataSet frequentemente você também 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 também 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 aplicação de acesso a dados, você deve considerar o nível de funcionalidade que vai precisar usar na sua aplicação.

Você deve usar um DataSet em sua aplicação quando:

Você deve usar um DataReader em sua aplicação quando:

Nota: O DataAdapter usa o DataReader par preencher o DataSet. Desta forma , o desempenho ganho pela utilização do DataReader é que você salva na memória os dados que o DataSet irá consumir.

Em resumo: utilize um DataReader sempre que você puder, deixando a utilização de um DataSet para os casos realmente necessários.

Dicas para utilizar melhor o DataReader

Boas práticas  para acesso a dados com ADO.NET

Até o próximo artigo VB.NET ...


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti