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 :
Conectar a fonte de dados
Ler , modificar e manipular dados
Atualizar a fonte de daos
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 :
SQL Server .NET Data Provider - Fornece um acesso otimizado ao SQL Server 2000 e SQL Server 7.0 . Para ser usado devemos incluir o namespace System.Data.SqlClient em suas aplicações
OLE DB .NET Data Provider - Fornece acesso a outros banco de dados : Oracle , Sybase, DB2/400 e Access e também ao SQL Server versões anteriores a 7.0.Para ser usado devemos incluir o namespace System.Data.OleDb em suas aplicações
Além destes outros provedores serão disponibilizados para outras fontes de dados. A mais recente disponibilização refere-se ao
Open DataBase Connectivity (ODBC) .NET Provider
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 :
O código é mais legível
É mais fácil debugar
É 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