Curso de ADO.NET e BDP - Parte II

Acesso a dados no Delphi 8 for .NET

 

Parte II – Conexões com BdpConnection

Nesta segunda parte do curso, começaremos a estudar cada um dos componentes utilizados em aplicações de banco de dados usando ADO.NET e BDP. Neste artigo conheceremos o componente BdpConnection , suas principais propriedades, métodos e eventos.

 

Nota: Lembre-se que nosso foco principal é a utilização dos componentes do BDP, porém, a maioria das técnicas apresentadas pode ser facilmente aplicada aos demais providers .

 

O BdpConnection é responsável por estabelecer uma conexão com o banco de dados. Suas principais propriedades são ConnectionString , que contém as informações necessárias para conexão com o BD, e ConnectionOptions , que contém os parâmetros opcionais da conexão, como nível de isolamento de transação, LoginPrompt etc. Seus principais métodos são Open e Close . Seu evento StateChange é disparado quando é alterado e estado da conexão ( ConnectionState.Open ou ConnectionState.Closed ).

 

Dica: O componente BdpConnection do BDP equivale aos seguintes da VCL: Database (para quem usa BDE); SQLConnection (dbExpress); ADOConnection (ADO); IBConnection (IBX) .

Criando uma conexão

Faremos agora uma conexão ao banco de dados employee que é distribuído com os demos do Interbase. Para construir este exemplo, é necessário que você tenha instalado o Interbase 7.1

No Delphi 8, vá até o Data Explorer localizado ao lado do Project Manager e Model View . O Data Explorer permite que você “explore” os bancos de dados configurados para serem acessados pelo BDP, permitindo a visualização de tabelas, view, índices etc.

Dê um clique de direita sobre o item Interbase e escolha Add New Connection :

 

 

Em Provider Name escolha Interbase e em ConnectionName digite “EMPLOYEE'

 

 

Aperte Ok. A seguir, no Data Explorer , expanda o item Interbase e dê um clique de direita sobre a conexão EMPLOYEE , escolhendo a opção Modify Connection.


Será mostrado o editor de conexões do BDP, o Connections Editor , que é semelhante ao editor de conexões do dbExpress do Delphi 7.

Configura opção Database para apontar para o banco de dados employee.gdb , como mostrado a seguir (lembre-se de incluir localhost antes do caminho do banco):

 

 

Clique em Test para verificar se os parâmetros de conexão foram configurados corretamente

 

 

 

Clique em Ok para confirmar as alterações.

As informações sobre as conexões criadas com o BDP ficam salvas em um arquivo chamado bdpconnections.xml , localizado por padrão no diretório Bin do Delphi. Veja o conteúdo deste arquivo na figura a seguir:

 

 

Este arquivo é semelhante ao dbxconnections.ini , utilizado pelo dbExpress.

Um exemplo prático

Clique em File|New|Windows Forms Application . Arraste até o formulário o componente BdpConnection da categoria Borland Data Provider . Observe que em uma aplicação Windows Forms os componentes não-visuais são posicionados abaixo do designer.

 

Dica: O componente BdpConnection do BDP equivale aos seguintes da VCL: Database (para quem usa BDE); SQLConnection (dbExpress); ADOConnection (ADO); IBConnection (IBX).

 

Selecione o BdpConnection1 e no Object Inspector escolha EMPLOYEE na propriedade ConnectionString :

 

 

Neste momento, o Delphi atribui para a propriedade ConnectionString uma série de parâmetros no estilo parâmetro=valor , separados por “;”  Para este exemplo, nossa ConnectionString ficou como:

 

database=localhost:C:\Borland\InterBase\examples\database\employee.gdb;

assembly=Borland.Data.Interbase, Version=1.5.1.0, Culture=neutral,

PublicKeyToken=91d62ebb5b0d1b1b;vendorclient=gds32.dll;provider=Interbase;

username=sysdba;password=masterkey;

 

E ConnectionOptions ficou como :

 

waitonlocks=False;commitretain=False;sqldialect=3;

transaction isolation=ReadCom mitted;servercharset=;rolename=myrole;

 

Você pode verificar o código gerado para o componente no método InitializeComponent do formulário. Lembre-se que o .NET Framework não possui o conceito de persistência de objetos em arquivos DFM como faz a VCL, de forma que todas as propriedades dos componentes são inicializadas nesse método.

No formulário principal, coloque dois componentes TextBox , dois Buttons e uma StaturBar (todos da categoria Windows Forms ). Configure a propriedade ReadOnly e MultLine dos TextBoxes para True . Seu formulário deve estar semelhante ao mostrado a seguir (configure também o Text dos Buttons ):

 

 

No evento Click do botão Load digite:

 

procedure TWinForm1.Button1_Click(sender: System.Object; e: System.EventArgs);

begin

 BdpConnection1.Open;

end ;

 

Isso abrirá a conexão com o banco de dados, usando o método Open do BdpConnection. Para fechar a conexão, no evento Click do botão Close digite:

 

procedure TWinForm1.Button1_Click(sender: System.Object; e: System.EventArgs);

begin

 BdpConnection1.Close;

end ;

 

Quando o estado de uma conexão muda, o evento StateChange do BdpConnection é disparado. Insira um manipulador para este evento e digite o seguinte:

 

procedure TWinForm1.BdpConnection1_StateChange(sender: System.Object; e: System.Data.StateChangeEventArgs);

begin

 case BdpConnection1.State of

   ConnectionState.Open : StatusBar1.Text := 'Connected to ' +  BdpConnection1.Database;

   ConnectionState.Closed : StatusBar1.Text := 'Disconnected';

 end;

end;

 

Aqui testamos o valor da propriedade State do BdpConnection , que é do tipo enumerado ConnectionState . De acordo com o estado, exibimos uma informação na propriedade Text da StatusBar .

A propriedade Database do BdpConnection (somente-leitura) retorna o nome do banco de dados a atualmente conectado.

No evento Load do formulário digite:

 

procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs);

begin

 TextBox1.Text := BdpConnection1.ConnectionString;

 TextBox2.Text := BdpConnection1.ConnectionOptions;

end ;

 

Isso configura os TextBoxes com os atuais valores das propriedades ConnectionString e ConnectionOptions.

Execute a aplicação e teste a conexão:

 

 

Uma situação bastante comum é você ter que alterar os parâmetros de conexão em tempo de execução, quando sua aplicação for distribuída. Isso pode acontecer devido ao caminho do banco de dados ser diferente àquele configurado durante a fase de desenvolvimento, por exemplo. Poderíamos inserir código para ler em tempo de execução as entradas do arquivo bdpconnections.xml , e distribuir esse arquivo junto com a aplicação. O problema é que esse arquivo é exclusivo do BDP e a técnica não poderia ser utilizada para outros providers.

O .NET Framework oferece um mecanismo bastante interessante para permite a configuração dinâmica de propriedades de componentes em tempo de execução, recurso conhecido como Dynamic Proprierties .

Vejamos na prática um exemplo de utilização do recurso. Selecione o BdpConnection e abra o editor da propriedade DynamicProprierties.ConnectionString , e marque a opção mostrada a seguir:

 

 

Com isso, o valor da propriedade será armazenado em um arquivo XML chamado app.config ¸ que é adicionado ao projeto:

 

 

Ou seja, agora você pode alterar qualquer parâmetro da ConnectionString em tempo de execução, sem recompilar a aplicação:

Para fazer o BdpConnection ler o valor da propriedade a partir do arquivo XML, adicione o seguinte código ao evento Load do formulário:

 

BdpConnection1.ConnectionString := System.Configuration.ConfigurationSettings.AppSettings.Get

('BdpConnection1.ConnectionString');

 

E com isso finalizamos este parte do curso. No próximo artigo conheceremos o BdpCommand e o BdpDataReader . Até lá!

Leia todos artigos da série