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;" & _ 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;" & _ 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
|
OLE DB .NET Data Provider |
Localizado no namespace System.Data.OleDb.
|
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
|
.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.
|
.NET Data Provider Personalizado |
|
SQLXML Classes gerenciadas |
|
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.
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.
Dicas para utilizar melhor o DataReader
O DataReader deve ser fechado antes de acessar qualquer parâmetro de saída para um Command associado.
Sempre feche o DataReader quando você terminou de ler os dados. Se a conexão que você esta usando é usada somente para retornar o DataReader feche a conexão imediatamente depois de fechar o DataReader.
O DataReader não 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 invés de GetValue.
Se você estiver terminando de ler dados de um DataAdapter mas ainda tem uma grande quantidade de dados não 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 não leu quando ele foi fechado.
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Criando uma livraria de Classes (DLL) - Crie ... - Macoratti.net