Desenvolvimento - ADO.NET

Consulta a BD no .NET: Parte 1, páginas ASP

Neste artigo veremos como fazer consultas a banco de dados em páginas ASP.NET usando o Visual Studio.NET Beta 1. Uma segunda parte deste artigo mostrará como exibir o resultado em um "WinForm"...

por Mauro Sant'Anna



A plataforma Microsoft.NET inclui uma nova arquitetura para acesso a bancos de dados chamada "ADO.NET". Esta arquitetura guarda muitas semelhanças com o ADO tradicional, mas na verdade ela foi desenvolvida visando principalmente o acesso a bancos de dados desconectados.

Neste artigo veremos como fazer consultas a banco de dados em páginas ASP.NET usando o Visual Studio.NET Beta 1. Uma segunda parte deste artigo mostrará como exibir o resultado em um "WinForm".

ADO e ADO.NET

O ADO tradicional permite acesso a banco de dados desconectados através do "RDS - Remote Data Services". O ADO.NET vai bem além das capacidades do RDS, trazendo diversas vantagens:

  • Define um "banco de dados desconectado" no componente DataSet. Este componente pode conter tabelas, relacionamentos e "constraints". No RDS temos apenas os "buffers" associados aos componentes RecordSet, sobre os quais não podemos agir diretamente;
  • Permite um controle muito fino de como são feitas as atualizações no banco de dados a partir das modificações contidas no DataSet;
  • Suporta várias conversões de/para XML;
  • Permite a fácil criação de aplicativos para exibição e atualização em páginas Web, inclusive com "paginação".

O ADO.NET não tem a pretensão de manter a compatibilidade com o ADO tradicional; existem algumas semelhanças e muitas diferenças:

  • A classe ADODB.Connection continua presente quase sem modificações com o nome de ADOConnection;
  • A classe ADODB.Command, usada geralmente para chamar "Stored Procedures" continua presente com algumas modificações sob o nome de ADOCommand;
  • A classe ADODB.RecordSet não existe mais;
  • A nova classe ADODataReader corresponde mais ou menos a um "RecordSet read-only, forward-only". Ele é usado para ler conjunto de resultados de forma muito rápida;
  • Existe uma sofisticada arquitetura de consultas e atualizações "off-line" usando os componentes ADODataSetCommand, ADODataSet e DataView, que não será abordada neste artigo.

Consultas simples

A forma mais fácil de fazer uma consulta em um banco de dados com ADO.NET é criando um componente ADOCommand e colocando seu conjunto de resultado em um ADODataReader e a seguir em um DataGrid.

Criando a string de conexão

Para acessar um banco de dados, você deve obter uma "string de conexão". A forma mais fácil de fazer isso é usando o "Server Explorer" do próprio Visual Studio.NET. Peça "View | Server Explorer" e dê um clique duplo em "Add Connection":

Adicionando nova conexão

Figura 1: Adicionando nova conexão

Selecione a página "Provider" e escolha "Microsoft OLEDB Provider for SQL Server":

Seleção do provedor

Figura 2: Seleção do provedor

Selecione o servidor, forneça nome e senha e escolha o banco de dados. No nosso caso, usaremos o banco de dados de exemplo "Northwind":

Figura 3:

Figura 3: Seleção de servidor e banco

Teremos agora uma nova conexão no "Server Explorer":

Server explorer com nova conexão

Figura 4: Server explorer com nova conexão

Criando o aplicativo

Crie um novo projeto "Web Application usando a linguagem C#":

Criando nova aplicação web

Figura 5: Criando nova aplicação web

Adicione ao formulário um componente ADOConnection a partir da página "Data" do Toolbox:

Página em branco

Figura 6: Página em branco

Adicione também um DataGrid a partir da página "Web Forms" do Toolbox:

GridView adicionado

Figura 7: GridView adicionado

Exiba a caixa de propriedades pressionando "F4", selecione o componente "adoConnection1" e ajuste a propriedade Connection para "servidor.Northwind":

Selecionando a conexão

Figura 8: Selecionando a conexão

Selecione agora o componente "WebForm1" e clique no "raio", selecionando a página de eventos:

Definindo o evento Page_Load

Figura 9: Definindo o evento Page_Load

Dê um clique duplo em Page_Load. Você será direcionado ao editor de código. Acrescente a linha "using System.Data.ADO" no início.

Acrescente também o seguinte código ao evento Page_Load:

Listagem 1: Exibindo dados no GridView

// Abre a conexão
adoConnection1.Open();
// Cria objeto associado ao comando SQL
ADOCommand Cmd = new ADOCommand("select * from Products", adoConnection1);
ADODataReader Produtos;
// Executa o comando e coloca o resultado no DataReader
Cmd.Execute(out Produtos);
// Coloca o resultado no DataGrid
DataGrid1.DataSource = Produtos;
DataGrid1.DataBind();
// Fecha o DataReader
Produtos.Close();
// Fecha a conexão
adoConnection1.Close();

Veja o código no editor:

Evento Page_Load no editor

Figura 10: Evento Page_Load no editor

Execute o programa com "Debug | Start Without Debugging" e veja o resultado:

Dados exibidos

Figura 11: Dados exibidos

try/finally

Na verdade falta um detalhe em nosso código: colocar dois blocos try/finally para garantir que tanto o DataReader como a conexão sejam fechadas se ocorrer uma exception. Nosso código fica agora assim:

Listagem 2: Modificação no código

// Abre a conexão
adoConnection1.Open();
try {
// Cria objeto associado ao comando SQL
ADOCommand Cmd = new ADOCommand("select * from Products", adoConnection1);
ADODataReader Produtos;
// Executa o comando e coloca o resultado no DataReader
Cmd.Execute(out Produtos);
try {
// Coloca o resultado no DataGrid
DataGrid1.DataSource = Produtos;
DataGrid1.DataBind();
}
finally {
// Fecha o DataReader
Produtos.Close();
}
}
finally {
// Fecha a conexão
adoConnection1.Close();
}

Conclusão

O acesso a bancos de dados em páginas ASP.NET é bastante simples e poderoso, permitindo a criação de aplicativos que exibem resultados de consultas SQL em uma "tabela HTML" de forma simples.

A arquitetra baseada no componente DataSet é um pouco mais complexa, mas tem ainda mais recursos.

Mauro Sant'Anna

Mauro Sant'Anna - Mauro tem mais de 20 anos de experiência no desenvolvimento de software, com produtos publicados no Brasil, Portugal e Estados Unidos, além de extensa experiência em treinamento e consultoria no desenvolvimento de software, tanto criando material como ministrando cursos.
Mauro é um "Microsoft Most Valuable Professional" (MVP - www.microsoft.com/mvp), “Microsoft Regional Director” (RD - www.microsoft.com/rd), membro do INETA Speaker’s Bureau (www.ineta.org) e possui as certificações MCP, MCSA (Windows 2000/2003), MCAD (C# e VB), MCDBA, MCSE (Windows 2000/2003).
Sua empresa, a M. A. S Informática (www.mas.com.br), treinou centenas de turmas em desenvolvimento de software nos últimos anos.