Novidades

Delphi Prism, ASP.NET AJAX e Firebird

Desesenvolva aplicações Web com as melhores tecnologias atuais

 

Guinther Pauli (guinther.pauli@gmail.com) tem 22 anos de experiência na área de desenvolvimento e arquitetura de software, dos quais 14 dedicados ao Delphi e 9 ao .NET/C#. Certificado em Delphi 3, 5, 6, 7, 2005, 2006, Delphi para Web e Delphi para Linux, Certificado Microsoft MCP, MCAD, MCSD.NET, MCTS e MCPD (C#, ASP.NET, VB.NET, MSF, SQL Server). Editor geral da Revista ClubeDelphi, Editor Geral da Revista .NET Magazine, professor de Pós-Graduação da UNIVEM-SP. Publicou mais de 150 artigos, 400 vídeo-aulas, palestrante em 5 edições da Borland Conference. Especialista em desenvolvimento Delphi, C#, .NET, ASP.NET, atuando também em projetos de migração orientando empresas e desenvolvedores na adotação de melhores práticas. Blog: http://guintherpauli.blogspot.com

 

Neste artigo veremos como acessar um banco de dados Firebird usando o Delphi Prism. Nossa aplicação será Web, construída sobre o ASP.NET com AJAX, no Visual Studio 2008. Desenvolveremos um Web Site simples, usando boas práticas de programação, como separação em camadas e uso de DAL (Data Access Layer). Além disso, usaremos o provider nativo do Firebird para ADO.NET, mais otimizado que qualquer outra forma de acesso. Veremos também como usar o ObjectDataSource, já que o SqlDataSource não deve ser usado em situações reais.


Instalando o provider ADO.NET

Existem inúmeras formas de acessar um banco de dados Firebird a partir de uma aplicação .NET. Sem dúvida, a melhor delas é usando o provider nativo do Firebird para o ADO.NET (veja sessão links). Baixe e instale o MSI.

 

 

Criando o ASP.NET Web Site

   No Delphi Prism, iniciamos um novo Web Site ASP.NET, escolhendo um location para o site, a versão do framework como .NET 3.5 e linguagem Oxygene.


Para usarmos AJAX, precisamos colocar um ScriptManager no topo do formulário. Logo abaixo, colocamos um UpdatePanel e dentro dele, um GridView e um DetailsView. No DetailsView, configure a propriedade AutoGenerateInsertButton para True e DefaultMode para Insert.

            Nós colocamos um GridView para visualizar os dados, e um DetailsView para permitir a inserção, já que, diferente do DBGrid da VCL, o GridView não suporta inserção.


Referenciando o assembly do provider

O próximo passo é dar um clique de direita no nome do WebSite no Solution Explorer e escolher Add Reference. Na janela que aparece, escolhemos browse e localizamos o assembly FirebirdSql.Data.FirebirdClient.dll, no diretório de instalação do FBClient, em c:\Programs Files\FirebirdClient (padrão).


 

Codificando a classe de acesso a dados

Não existe DataModule no .NET Framework. Precisamos usar um framework de persistência, como o NHibernate ou ADO.NET Entity Framework. Ou construir uma classe DAL (Data Access Layer), opção que farei aqui. Então, clique de direita no Solution Explorer e adicione uma classe chamada DAL.pas ao projeto, colocando-a na pasta App_Code.

   O código da classe DAL está na listagem abaixo. Aqui usamos basicamente ADO.NET, com o provider nativo do Firebird, para criar os métodos CRUD para manipular dados (escolhi a tabela Customer, que é a mais simples do banco).

 

namespace;

 

interface

 

uses

  System,

  System.Data,

  System.Web.Configuration,

  FirebirdSql.Data.FirebirdClient;

 

type

  DAL = public class

  public

    constructor;

    method Select(): DataSet;

    method Insert(Cust_No: integer; Customer: String);

    method Update(Cust_No: integer; Customer: String);

    method Delete(Cust_No: integer);

    method ConStr(): String;

  end;

 

implementation

 

constructor DAL;

begin

 

end;

 

method DAL.Select(): DataSet;

begin

    var Con := new FbConnection(ConStr);

    var SQL := "select Cust_No, Customer from Customer";

    var da := new FbDataAdapter(SQL,Con);

    var ds := new DataSet();

    da.Fill(ds);

    result := ds;

end;

 

method DAL.Insert(Cust_No: integer; Customer: String);

begin

    var Con := new FbConnection(ConStr);

    var SQL := "insert into Customer (Customer) values (@Customer);";

    var cmd := new FbCommand(SQL, Con);

    cmd.Parameters.AddWithValue("@Customer",Customer);

    Con.Open();

    try

      cmd.ExecuteNonQuery();

    finally

       Con.Close();

    end;

end;

 

method DAL.Update(Cust_No: integer; Customer: String);

begin

    var Con := new FbConnection(ConStr);

    var SQL := "update Customer set Cust_No=:Cust_No, Customer=:Customer where Cust_No=:Cust_No);";

    var cmd := new FbCommand(SQL, Con);

    cmd.Parameters.AddWithValue(":Cust_No",Cust_No);

    cmd.Parameters.AddWithValue(":Customer",Customer);

    Con.Open();

    try

      cmd.ExecuteNonQuery();

    finally

       Con.Close();

    end;

end;

 

method DAL.Delete(Cust_No: integer);

begin

    var Con := new FbConnection(ConStr);

    var SQL := "delete from Customer where Cust_No=:Cust_No;";

    var cmd := new FbCommand(SQL, Con);

    cmd.Parameters.AddWithValue(":Cust_No",Cust_No);   

    Con.Open();

    try

      cmd.ExecuteNonQuery();

    finally

       Con.Close();

    end;

end;

 

 

method DAL.ConStr(): String;

begin

    result := "User=SYSDBA;Password=masterkey;Database=C:\Program Files\Firebird\Firebird_1_5\examples\Employee.fdb;DataSource=localhost;"   

end;

 

end.

 

   Nota: Uma boa prática é colocar a ConnectionString no arquivo Web.Config.

 

Usando o ObjectDataSource

Para fazer a ligação entre a camada de interface AJAX e a camada de acesso a dados, vamos colocar um ObjectDataSource dentro do UpdatePanel. Nas suas Tasks, escolhemos Configure Data Source. O próximo passo é escolher nossa classe DAL e apontar os métodos.





Agora basta usar as Tasks dos controles GridView e DetailsView para apontar para o ObjectDataSource. Nas Tasks do GridView habilitamos o Update e Delete.


Testando

Pressionando Ctrl+F5 temos o resultado o Web Site.




Links

Firebird ADO.NET Provider 2.5.0 for .NET 3.5/2.0 [with Entity Framework support]

http://www.firebirdsql.org/index.php?op=files&id=netprovider

Download do código-fonte deste exemplo

http://cc.embarcadero.com/Author/222668

Blog do Autor

http://guintherpauli.blogspot.com

http://twitter.com/guintherpauli