Curso de ADO.NET e BDP

Acesso a dados no Delphi 8 for .NET

 

Este artigo é o primeiro de uma série que mostrará como utilizar os componentes do ADO.NET e BDP para acesso a banco de dados usando o Delphi 8. Nesta primeira parte, faremos uma introdução ao ADO.NET, mostrando seus objetivos, arquitetura e principais componentes. Depois, veremos na prática como utilizar cada um dos componentes do ADO.NET e BDP no Delphi 8, em aplicações Windows Forms, Web Forms e Web Services. Os exemplos que mostrarei neste curso são semelhantes ao que apresentei durante minha palestra na III Borland Conference. O código-fonte pode ser baixado no endereço cc.borland.com/cc/ccweb.exe/author?authorid=222668.

 

Dica: confira as edições 43, 53 e 54 da Revista ClubeDelphi para obter mais informações sobre o ADO.NET e BDP no Delphi 8.

Introdução ao ADO.NET

O ADO.NET é a tecnologia de acesso a dados no .NET Framework. Sua arquitetura elegante e bem definida oferece inúmeros benefícios: Interoperabilidade, Escalabilidade, Produtividade e Performance. O ADO.NET é uma evolução do ADO (Active Data Objects) e é totalmente escrito com código gerenciado (Managed Code). O ADO.NET é uma evolução do modelo cliente/servidor, projetada especialmente para a construção de aplicações escaláveis, distribuídas e para Web.

Costumo dizer que o ADO.NET possui muitas características que a Borland já havia incorporado à tecnologia DataSnap. De fato, ambos os frameworks foram construídos para suportar os mesmos tipos de aplicação. Com isso, se você já está acostumado a desenvolver aplicações DataSnap ou mesmo client / server (com dbExpress / DataSetProvider / ClientDataSet) no Delphi, não terá maiores dificuldades em se adaptar ao novo modelo.

Vejamos a seguir uma descrição dos principais objetivos da arquitetura:

·         Interoperabilidade

Uso de XML para intercâmbio de dados ao invés do COM (ADO);

Tráfego de dados através do HTTP (minimizando problemas com Firewalls);

·         Escalabilidade

Evolução do ADO e modelo cliente / servidor;

Baseado em DataSets desconectados e no modelo de objetos distribuídos;

·         Performance e robustez

Projetado para grandes aplicações corporativas e Web;

·         Produtividade

Possui um rico conjunto de classes e interfaces com funções bem definidas;

São várias linguagens e ferramentas de desenvolvimento que oferecem suporte ao ADO.NET, de forma que há uma curva de aprendizado muito pequena ao se trocar de linguagem;

Componentes do ADO.NET

As classes do ADO.NET estão divididas em dois grandes grupos: Managed Provides (provedores gerenciados) e Content Components (componentes de conteúdo).

Os componentes do grupo Managed Providers são responsáveis pelo Acesso a Dados, e incluem classes para conexão, transações, execução de comandos e leitura de dados. O segundo grupo engloba os componentes que manipulam os dados em memória, como DataSet, DataTable, DataRow, DataColumn etc.

No ADO.NET, os Providers são responsáveis pelo acesso a dados. Um Provider é um conjunto de componentes que implementam as interfaces básicas do ADO.NET, a saber:

 

IDbConnection - define métodos e propriedades para conexão a uma fonte de dados;

IDbDataAdapter - define métodos e propriedades para obtenção e atualizações de dados;

IDbTransaction - define métodos e propriedades para gerenciamento de transações;

IDataReader - define métodos e propriedades para manipulação / leitura de um cursor de dados;

IDbCommand – define métodos e propriedades para execução de comandos SQL no BD:

 

Observe que, obviamente, as interfaces apenas definem seu comportamento. A partir daí, qualquer fabricante de um BD pode criar componentes que implementem essas interfaces para permitir acesso ao seu SGBD. Com isso, o ADO.NET (por ser uma arquitetura aberta) podem facilmente ser estendido. Como todos os componentes seguem o mesmo padrão (já que implementam as mesmas interfaces), é possível utilizar esses componentes de forma bastante semelhante em aplicações Windows Forms, Web Forms e Web Services. Ao conjunto de componentes que implementam essas interfaces é dado o nome de Provider.

O .NET Framework 1.1 já é distribuído com quatro Providers nativos:

 

SQL Provider – para acesso ao SQL Server;

OleDB Provider – para acesso a fontes de dados que possuam um driver OleDB;

ODBC Provider - para acesso a fontes de dados que possuam um driver ODBC;

Oracle Provider – para acesso ao Oracle.

 

Ou seja, se você precisar acessar o SQL Server, por exemplo, utilizará as classes do primeiro Provider da lista anterior. Nesse caso: SqlConnection, SqlDataAdapter, SqlTransaction, SqlDataReader, SqlCommand etc. Se escolher o Oracle, então temos: OracleConnection, OracleDataAdapter, OracleTransaction, OracleDataReader, OracleCommand etc.

Existem diversos outros Providers para ADO.NET disponibilizados na Web, por exemplo, para acesso ao Firebird, MySQL etc.

O que é Borland Data Provider (BDP)?

Usar componentes diferentes para bancos diferentes (a menos que você use uma conexão OleDb ou ODBC) pode soar estranho para os desenvolvedores Delphi, já que estamos acostumados a utilizar um mesmo conjunto de componentes para acesso a uma diversidade de servidores de BD. De fato, o dbExpress, por exemplo, permite a utilização de um mesmo conjunto de componentes para acessar o Interbase, Oracle, DB2, MySQL etc.

Sabendo disso, a Borland criou seu próprio Provider para ADO.NET, implementando as interfaces listadas anteriormente. A grande diferença é que a implementação não está vinculada a um único BD, mas a um Driver (algo semelhante ao que faz o dbExpress). Com isso, para acessar diferentes BD você não precisará usar diferentes componentes, apenas trocar alguns parâmetros de conexão.

Esse Provider construído pela Borland é distribuído com o Delphi 8 e C#Builder, e recebeu o nome de Borland Data Provider (BDP). Uma outra vantagem do BDP é suportar o recurso de Live-Data, de forma que você pode visualizar dados do BD em controles de tela mesmo em tempo design. Incrivelmente, esse recurso não está presente nos demais Providers ou outras ferramentas de desenvolvimento, como o VS.NET.

Os componentes do BDP podem ser vistos na figura a seguir:



 

Neste curso daremos especial atenção ao BDP. Mas lembre-se, como todos os Providers seguem o mesmo padrão (implementam as mesmas interfaces), a maioria das técnicas que mostrarei neste curso usando o BDP podem ser facilmente adaptadas a outros Providers. Ou seja, quando for apresentado um recurso do BdpCommand, por exemplo, saiba que o mesmo pode ser utilizado com o OracleCommand, SqlCommand, OleDbCommand etc. É claro, o BDP possui algumas exclusividades, que indicarei no texto quando a mesma não estiver presente nos demais Providers.

O segundo grupo de componentes do ADO.NET são responsáveis pela cache e manipulação de dados na aplicação cliente. O principal componente desse grupo (e diria da arquitetura do ADO.NET como um todo) é o DataSet, que é uma coleção de objetos DataTable, algo semelhante ao ClientDataSet para quem usa a VCL. O DataSet independe da fonte de dados, e pode ser utilizado com qualquer um dos Providers listados anteriormente (o que também se assemelha ao ClientDataSet da VCL, que pode ser usado como o dbExpress, BDE, ADO, IBX etc). Faremos muitos exemplos demonstrando técnicas avançadas do uso deste componente, e o estudaremos em detalhes futuramente.

Arquitetura

A figura a seguir mostra a arquitetura de uma aplicação distribuída usando ADO.NET. Observe que, por usar XML para intercâmbio de dados, você pode facilmente trocar dados através da Internet. A aplicação cliente pode ser construída usando Windows Forms ou Web Forms:

 

 

Comparativo ADO.NET x VCL (dbExpress / BDE)

Acredito que a maioria dos leitores já utiliza o dbExpress ou o BDE para construir aplicações de acesso a BD no Delphi. Dessa forma, construi uma pequena tabela (abaixo) que mostra um paralelo entre as classes do ADO.NET (providers BDP e SQL) e da VCL, para que você possa se situar melhor:

ADO.NET

VCL

BDP

SQL Managed

dbExpress

BDE

BdpConnection

SqlConnection

SqlConnection

DataBase

BdpCommand

SQlCommand

* ISQLCommnand

 

BdpDataReader

SqlDataReader

SQLDataSet

Query

BdpDataAdapter

SqlDataAdapter

SqlDataSet +
DataSetProvider

Query+
DataSetProvider

BdpTransaction

SqlTransaction

Transações gerenciadas pelo SQLConnection

Transações
gerenciadas pelo
Database

DataSet

Coleção de vários ClientDataSets

* Não possui um componente equivalente direto

Nas próximas partes deste curso veremos na prática como utilizar os componentes do ADO.NET / BDP em aplicações Windows Forms, Web Forms e Web Services, e estudaremos em detalhes cada um dos componentes aqui apresentados, suas principais propriedades, métodos e eventos.

Um abraço a todos e até lá!

Leia todos artigos da série