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'AnnaA 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":
Figura 1: Adicionando nova conexão
Selecione a página "Provider" e escolha "Microsoft OLEDB Provider for SQL Server":
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: Seleção de servidor e banco
Teremos agora uma nova conexão no "Server Explorer":
Figura 4: Server explorer com nova conexão
Criando o aplicativo
Crie um novo projeto "Web Application usando a linguagem C#":
Figura 5: Criando nova aplicação web
Adicione ao formulário um componente ADOConnection a partir da página "Data" do Toolbox:
Figura 6: Página em branco
Adicione também um DataGrid a partir da página "Web Forms" do Toolbox:
Figura 7: GridView adicionado
Exiba a caixa de propriedades pressionando "F4", selecione o componente "adoConnection1" e ajuste a propriedade Connection para "servidor.Northwind":
Figura 8: Selecionando a conexão
Selecione agora o componente "WebForm1" e clique no "raio", selecionando a página de eventos:
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:
Figura 10: Evento Page_Load no editor
Execute o programa com "Debug | Start Without Debugging" e veja o resultado:
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.