ADO.NET - Acessando fonte de dados - uma visão geral II

 

Neste artigo eu vou procurar explicar os conceitos e procedimentos necessários para criar e gerenciar uma conexão ADO.NET com diversas fontes de dados. Vou ser objetivo , direto e conciso ; irei adotar a simulação de perguntas e respostas para tornar mais clara o conteúdo da matéria do artigo.

 

1- Escolhendo um provedor de dados .NET

 

A primeira coisa a fazer para criar uma conexão ADo.NET com uma fonte de dados é escolher o provedor dados .NET . Cada provedor fornece classes que permitem realizar as seguintes tarefas :

O que é um provedor dados .NET ( .NET data providers ) ?

R - Os provedores de dados .NET são um conjunto de componentes incluídos na arquitetura ADO.NET que permitem a comunicação entre a fonte de dados e o componente , um XML , WEB Service ou uma aplicação.

 

Quais os tipos de provedores de dados disponíveis ?

R - Os provedores de dados disponíveis com o .NET Framework são :

Além destes outros provedores serão disponibilizados para outras fontes de dados. A mais recente disponibilização refere-se ao

Obs: o provedor ODBC precisa ser instalado a parte do .NET Framework , então a primeira coisa a fazer é pegar o provedor no site da Micro$oft - (http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.asp?url=/MSDN-FILES/027/001/668/msdncompositedoc.xml ).  Para saber como instalar leia o artigo : Instalando e usando o ODBC .Net Data Provider

 

2- As classes dos provedores de dados .NET

 

Os provedores de dados .NET foram concebidos para serem eficientes e 'leves' criando uma camada mínima entre o seu código e a fonte de dados de forma a aumentar a eficiência sem comprometer a funcionalidade. A ADO.NET fornece um modelo de objeto comum aos provedores de dados .NET , abaixo temos as quatro classes que os compõem :

 

Classe Descrição
XxxConnection (SqlConnection / OleDbConnection/ObdcConncetion) Estabelece uma conexão com uma fonte de dados específica.
XxxCommand Executa um comando a partir de uma fonte de dados.
XxxDataReader Lê um fluxo de dados de uma fonte de dados no modo somente leitura e somente para frente. (ready-only / forward-only)
XxxDataAdapter Usa objetos XxxCommand para preencher um DataSet.

 

Nota: A notação Xxx refere-se a cada provedor específico. Assim : Xxx pode significar : OleDb , Sql ou Obdc.

 

3- Qual provedor de dados .NET eu devo utilizar ?

 

A escolha do provedor de dados mais adequado para sua aplicação depende do tipo da fonte de dados que você vai acessar.

 

O assembly System.Data.Dll implementa o provedor SQL Server .NET e o provedor OLE DB .NET nos namespaces :  System.Data.SqlClient e System.Data.OleDb. O assembly System.Data.Odbc.dll implementa o provedor de dados ODBC.NET , e não faz parte do Visual Studio .NET.

 

a - O provedor da dados SQL Server .NET estabelece uma fina camada de comunicação entre a aplicação e o SQL Server , e por que usa seu próprio protocolo (TDS) para se comunicar com o SQL Server acessa diretamente esta fonte de dados sem camadas adicionais e de uma forma leve fornecendo um ótimo desempenho e escalabilidade. Este provedor também é recomendado para aplicações de uma só camada que utilizem o MSDE.

 

b - O provedor de dados OLE DB .NET utiliza o OLE DB nativo e a interoperabilidade COM para realizar a conexão e a comunicação com uma fonte de dados. Você vai ter que usar um provedor OLE DB ao utilizar este provedor , indicando-o em uma string de conexão . A palavra chave Provider na string de conexão indica o tipo da fonte de dados OLE DB com a qual você deseja se conectar.Ex: "Provider=MSDAORA" indica uma conexão com uma fonte de dados Oracle.  Abaixo algumas strings de conexão :

 

Fonte de Dados String de Conexão
SQL Server 6.5 Provider=SQLOLEDB;Data Source=Teste;Initial Catalog=teste;User ID=sa;Password=sa
Oracle Provider=MSDAORA;Data Source=Oracle817;User ID=sa;Password=sa
Access Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\teste.mdb

 

c - O provedor de dados ODBC .NET usa a interface ODBC para fazer a conexão e a comunicação com uma fonte de dados. Abaixo exemplos de conexões :

 

Fonte de Dados Provider/Driver String de Conexão
Oracle ORA/ODBC Driver={Microsoft ODBC for Oracle};Server=ORACLE817;UID=sa;PWD=sa;
Access Jet ODBC Driver={Microsoft Access Driver(*.mdb)};DBQ=c:\teste.mdb

 

Na tabela abaixo temos um resumo de como escolher o provedor de dados .NET de acordo com a fonte de dados :

 

Fonte de dados Provedor de dados a escolher
SQL Server 7.0 ou SQL Server 2000 SQL Server .NET
SQL Server 6.5 ou anterior OLE DB .NET
Fonte de dados que podem ser acessadas via OLE DB OLE DB .NET
Fonte de dados que podem ser acessadas via ODBC ODBC .NET

 

4- Definindo uma conexão e a segurança da fonte de dados.

Ao criar aplicações que acessam uma base de dados seguras usando ADO.NET normalmente você terá que informar uma chave e uma senha antes de realizar a conexão. A segurança implementada vai depender do banco de dados utilizado. O SQL Server pode operar em dois modos de autenticação : Autenticação do Microsoft Windows e o modo Misto ( Autenticação Windows e autenticação do SQL Server).

 

Para ter acesso aos dados sua aplicação terá que realizar uma conexão com o banco de dados e para isto você vai usar uma string de conexão que fornece informação que define a conexão com a fonte de dados. A tabela abaixo descreve alguns parâmetros usados em strings de conexão:

 

Parâmetro Descrição
Provider Define ou retorna onome do provedor para a conexão. É usado somente para objetos OleDbConnection.
Connection Timeout O tempo em segundos de espera para que a conexão com o servidor seja estabelecida.
Initial Catalog O nome da fonte de dados.
Data Source O nome da fonte de dados ( SQL Server , Access, ...) a ser usada a conexão esta aberta.
Password A senha da conta do usuário
User ID O nome/chave do usuário
Integrated Security O parâmetro que determina se a conexão será uma conexão segura ou não. Os valores possíveis são : True , False e SSPI.
Persist Security Info Se for False a informação de segurança como a senha não é retornada como parte da conexão se a conexão esta aberta. Se for True a senha será retornada na conexão . (não recomendada). O valor padrão é False

 

5- Como definir uma string de conexão ?

 

- Você pode definir a propriedade ConnectionString somente quando a conexão estiver fechada.

- Para resetar uma string de conexão você deve primeiro fechar e reabrir a conexão.

 

Você pode criar e gerenciar uma conexão usando um dos objetos connection que a ADO.NET disponibiliza , incluindo o objeto SqlConnection e o objeto OleDbConnection. ( Temos também o  provedor ODBCConnection ).

 

Vejamos alguns exemplos de strings de conexão mais usadas :

 

 1- Microsoft SQL Server 2000  

 Nome do Servidor  Santos
 Nome do Banco de dados  BiBlio
 Security  Modo misto
 UserName  teste
 Password  123456

 

Dim cnBiblio as New System.Data.SqlClient.SQLConnection()

cnBiblio.ConnectionString = "User ID=teste;Password=123456;Initial Catalog=Biblio;Data Source=Santos"

 

2- Microsoft Access 2000

 Nome do Banco de dados  c:\teste\BiBlio.mdb

 

Dim cnBiblio as New System.Data.OleDb.OleDbConnection()

cnBiblio.ConnectionString = "Provider=Microsoft.Jet.OLEB.4.0;Data Source=c:teste\Biblio.mdb"

 

6- Gerenciando uma conexão : Abrindo e Fechando uma conexão

 

Após definir a propriedade ConnectionString  você usa o método Open ou Close  para gerenciar o estado atual da  conexão. Você pode fazer isto de forma implicita  invocando os métodos no objeto que usa a conexão  ou explicitamente usando os métodos Open e Close:

 

A forma explicita é a recomendada para fechar e abrir conexões pelos seguintes motivos :

  1. O código é mais legível

  2. É mais fácil debugar

  3. É mais eficiente

Lembre-se de sempre fechar a conexão depois de usá-la. Para fazer isto podemos usar o método Close ou o Dispose do objeto Connection. O método Close fecha todas as transações pendentes ; Ele também fecha a conexão ou libera a conexão para o pool de conexões se o pooling estiver ativo.

 

Se você estiver trabalhando com DataAdapters você não tem que abrir e fechar explicitamente a conexão. Ao chamar um dos métodos deste objeto (Ex: Fill ou Update ) O método verifica se a conexão esta aberta , se não estiver o DataAdapter abre a conexão.

 

O método Dispose libera as conexões não gerenciadas e remove a conexão do pool de conexão.

 

Exemplo de uso do método Dispose :

 

- Vamos criar um objeto SqlConnection

- Abrir a conexão como método Open

- Fechar e liberar os recursos usados na conexão usando o método Dispose.

 

Dim cnBiblio as New System.Data.SqlClient.SQLConnection()

cnBiblio.ConnectionString = "User ID=teste;Password=123456;Initial Catalog=Biblio;Data Source=Santos"

 

cnBiblio.Open()

cnBiblio.Close()

cnBiblio.Dispose()

cnBiblio = Nothing

 

Em um próximo artigo irei abordar o assunto :  Gerenciando os eventos de conexão

 

Aguarde ...

 


José Carlos Macoratti