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