Vamos começar criando a tabela que vamos usar. Nesse artigo vou usar o SQL Server 2005 e Visual Studio 2008. Se você não tem o SQL Server, você pode baixar o Express Edition clicando aqui.

Rode o seguite script no seu banco.

 

CREATE TABLE [dbo].[CLIENTES](

      [Id] [int] IDENTITY(1,1) NOT NULL,

      [Nome] [nvarchar](200) NULL,

      [Email] [nvarchar](200) NULL,

      [Tel] [nvarchar](50),

 CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED

(

      [Id] ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

 

Em seguida, crie um novo projeto WebApplication no Visual Studio 2008.

Nesse artigo estou usando o nome de GDAArtigo, mas sinta-se a vontade para nomeá-lo da forma que quiser.

 
img

 

Agora devemos criar algumas camadas:
Model, DAL e FLOW.

Para isso eu costumo adicionar 2 novos projetos do tipo ClassLibrary, mas fique a vontade e faça isso da forma que você achar melhor.

Vá em SolutionExplorer, selecione sua Solution com o botão direito do mouse e clique em Add/New Project.

img

Essa será minha camada de acesso ao banco (DAL) e costumo nomeá-la como “DataAccessLayer” mas você pode escolher o nome que quiser.

Adicione duas pastas nesse projeto. Chame uma de Model e a outra de DAL, como mostra a figura.

 
img
 

Vamos agora criar a camada de fluxo, o FLOW.

Para isso, repita os passos dados para a criação do projeto anterior (DataAccessLayer) e desta vez o nome será BusinessFlowLayer. Esse é o nome que eu costumo colocar, mas fique a vontade se quiser mudar.

Feito isso sua SolutionExplorer deve ter ficado com essa aparência:

 
img
 

Logo em seguida, adicione o GDA nas referências. Se você ainda não tem o GDA você pode baixá-lo aqui.

 
img
 
Você deve adicioná-lo nos 3 projetos.

 

Em seguida vamos começar a configurar a aplicação para trabalhar com o GDA.

Primeiro, abra o bloco de notas e digite o seguinte:

   <GDA>

      <DefaultProvider name="GDAArtigo"/>

      <Debug trace="true"/>

      <ProvidersConfiguration>

        <Info name="GDAArtigo" providerName="MsSql" connectionString="Data Source=IARA;Initial Catalog=gda;Integrated Security=True"/>

      ProvidersConfiguration>

      <Providers>

        <Provider name="MsSql" classNamespace="GDA.Provider.MsSql" assembly="GDA" />

      Providers>

      <ModelsNamespace>

        <Namespace assembly="*" name="DataAccessLayer.Model"/>

      ModelsNamespace>

    GDA>

 

Salve o arquivo como GDA.config. Esse arquivo é uma espécie de web.config, porém do GDA, Feito isso coloque esse arquivo dentro da pasta bin de sua aplicação. Pode copiar e colar dentro da pasta pelo Windows Explorer mesmo.

Agora você pode compilar seu projeto.

Existe um software chamado GDA Model Generator para auxiliar na criação de Models, porém não vamos utilizá-lo nesse artigo. Vamos criar as models na “unha”.

Para isso selecione com o botão direito a pasta “Model” no projeto DataAccessLayer e adicione uma nova classe:

img
 

Coloque o nome de Cliente.cs. Ela vai representar nossa tabela CLIENTES, criada no começo do artigo.

Veja a seguir o código comentado:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using GDA;

using DataAccessLayer.DAL;

 

namespace DataAccessLayer.Model

{

    ///

    /// Model referente à tabela CLIENTES.

    ///

    //Através da PersistenceClass qual será a tabela que a classe representará.

    [PersistenceClass("CLIENTES")]

    //Através da PersistenceBaseDAO definimos qual será a Classe DAL dessa Model.

    [PersistenceBaseDAO(typeof(ClienteDAO))]

    public class Cliente

    {

        ///

        /// Identificador único do cliente.

        ///

        //PersistenceProperty defini qual o campo da tabela a propriedade da model vai representar.

        //Caso esse campo seja a chave da tabela, devemos definir através da PersistenceParameterType

        //Nesse caso, por ser um campo Auto-Incremento o valor será IdentityKey.

        [PersistenceProperty("Id", PersistenceParameterType.IdentityKey)]

        public int Id { get; set; }

 

        ///

        /// Nome do cliente.

        ///

        [PersistenceProperty("Nome")]

        public string Nome { get; set; }

 

        ///

        /// Email do cliente.

        ///

        [PersistenceProperty("Email")]

        public string Email { get; set; }

 

        ///

        /// Telefone do cliente.

        ///

        [PersistenceProperty("Tel")]

        public string Telefone { get; set; }

    }

}

 

Já temos nossa Model prontinha.

Agora vamos ver a classe de acesso ao banco.

Selecione a pasta DAO com o botão direito e adicione uma nova classe chamada ClienteDAO.cs.

A seguir veja o código comentado:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using GDA;

using DataAccessLayer.Model;

 

namespace DataAccessLayer.DAL

{

    ///

    ///Classe responsável pelas transações com o banco.

    ///

    //Representa a DAO (Data Access Objet) que ficará responsável pela manipulação dos dados da classe

    //Deve herdar de BaseDAO passando seu tipo, a model.

    public class ClienteDAO : BaseDAO<Cliente>

    {

    }

}

 

Chegou a hora de criarmos a camada de fluxo ClienteFlow.cs.

Para isso selecione seu projeto BusinessFlowLayer com o botão direito

e adicione uma nova classe com o nome de ClienteFlow.cs.

Essa classe deve ser estática. Veja o código a seguir:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace BusinessFlowLayer

{

    ///

    /// Camada onde são implementadas as regras e as operações do negócio

    /// É responsável por acionar os métodos da camada inferior (Data Access Layer) e

    /// organizar os fluxos de negócios

    /// Trabalha com N classes distintas

    ///

    public static class ClienteFlow

    {

    }

}

 

Estamos pronto para trabalhar com o GDA.

No seu projeto web, adicione um novo WebForm com o nome de Cliente.aspx.

Nele adicione 1Label, 3 Textox, um Button e um GridView.

Veja o código a seguir:

 

<h1>Clientesh1>

        <p>Nome:<br />

            <asp:TextBox ID="txtNome" runat="server">asp:TextBox>

            <br />

            Email:<br />

            <asp:TextBox ID="txtEmail" runat="server">asp:TextBox>

            <br />

            Telefone:<br />

            <asp:TextBox ID="txtTelefone" runat="server">asp:TextBox>

        p>

  <p>

            <asp:Button ID="btnInserir" runat="server" Text="Inserir" />

   <br />

            <asp:Label ID="lblMsg" runat="server">asp:Label>

        p>

        <p>

            <asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333"

                GridLines="None">

                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

                <RowStyle BackColor="#EFF3FB" />

                <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />

                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />

                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

                <EditRowStyle BackColor="#2461BF" />

                <AlternatingRowStyle BackColor="White" />

            asp:GridView>

        p>

       

Feito isso, vamos escrever os métodos de inserção, exclusão, edição e de busca.

Eles devem ser escritos na classe ClienteFlow.cs. Veja a seguir:

 

///

        /// Insere um cliente na base de dados

        ///

        /// Model Cliente

        public static void Inserir(Cliente cliente)

        {

            try

            {

                GDAOperations.Insert(cliente);

            }

            catch (Exception ex)

            {

                throw new Exception("Ocorreu um erro", ex);

            }

        }

 

        ///

        /// Exclui um cliente da base de dados

        ///

        /// Model Cliente

        public static void Excluir(Cliente cliente)

        {

            try

            {

                GDAOperations.Delete(cliente);

            }

            catch (Exception ex)

            {

                throw new Exception("Ocorreu um erro", ex);

            }

        }

 

        ///

        /// Atualiza um cliente na base de dados

        ///

        /// Model Cliente

        public static void Atualizar(Cliente cliente)

        {

            try

            {

                GDAOperations.Update(cliente);

            }

            catch (Exception ex)

            {

                throw new Exception("Ocorreu um erro", ex);

            }

        }

 

        ///

        /// Retorna uma lista de clientes.

        ///

        /// Model Cliente[]

        public static List<Cliente> ObterClientes()

        {

            return new Query().ToList<Cliente>();

        }

Em seguida, adicione um controle ObjectDataSource em Cliente.aspx e configure:

 
img
 

Defina ClienteFlow.cs como objeto de negócio.

Se BusinessFlowLayer.ClienteFlow não estiver aparecendo na ComboBox, compile ser projeto e tente de novo:

img
 
Método Select:
 

img
 
Método Update:
 
img
 
Método Delete:

img

 

Feito isso, defina o Id como DataKeyNames da grid. Para isso vá em propriedades da grid:

 
img
 

Agora podemos editar, deletar e visualizar os clientes. Precisamos inserir e configurar a grid para editar e deletar.

Para o método Inserir dê dois cliques no Button e adicione o seguinte:

 

  //Criamos o objeto da classe Cliente.

            DataAccessLayer.Model.Cliente cliente = new  DataAccessLayer.Model.Cliente();

            //Adicionamos os valores

            cliente.Email = txtEmail.Text;

            cliente.Nome = txtNome.Text;

            cliente.Telefone = txtTelefone.Text;

            //Não precisamos definir valor para Id por ser IdentityKey, o próprio

            //GDA faz isso para nós.

            try

            {

                //Agora chamamos o método de inserção.

                BusinessFlowLayer.ClienteFlow.Inserir(cliente);

                //Exibindo a mensagem.

                lblMsg.Text = "Cliente cadastrado com sucesso!";

                gvCliente.DataBind();

 

                //Limpando os TextBox

                txtTelefone.Text = string.Empty;

                txtNome.Text = string.Empty;

                txtEmail.Text = string.Empty;

            }

            catch (Exception ex)

            {

                lblMsg.Text = "Ocorreu um erro";

            }

 

Para configurar a grid como na figura:

 
img
 

Selecione os CheckBox conforme a figura.

Agora vamos definir os métodos gvCliente_RowUpdated e gvCliente_RowDeleted.

Para isso selecione as propriedade da grid e clique em Events conforme a figura:
img
 

Adicione o seguinte código:

 

     protected void gvCliente_RowUpdated(object sender, GridViewUpdatedEventArgs e)

        {

            lblMsg.Text = "Usuário atualizado";

        }

 

        protected void gvCliente_RowDeleted(object sender, GridViewDeletedEventArgs e)

        {

            lblMsg.Text = "Usuário excluído";

 

        }

 

Rode sua aplicação e veja os métodos funcioando.

Estou disponibilizando o código fonte junto com o artigo e você pode pegálo aqui

Você já deve ter percebido como é fácil trabalhar com o GDA e com o passar dos artigos vou apresentar muitas funcionalidades bacanas que ele tem.

E eu ainda me esqueci de dizer que ele é grátis.

Até a próxima...