Quarta-feira, 05 de julho de 2006 às 11h33

Data Access Layer com TableAdapter

Faltam 3 dias! Inscreva-se agora! O maior encontro de profissionais web da américa latina.

A produtividade tornou-se marca registrada na adoção de uma tecnologia, principalmente se você está preparando um projeto para um grande time de desenvolvimento. O mercado atual tende-se para utilização de ferramentas que sigam a linha do O/R Mapper (Object-Relational Mapper), ou seja, permitam fazer um mapeamento Objeto Relacional com seu banco de dados de forma que, automaticamente, você possa persistir seus objetos de negócios no banco de dados.

Com o .NET 2.0 ganhamos mais recursos na implementação de um modelo na linha do O/R utilizando Typed DataSets (DataSet Tipados) e TableAdapter. A idéia do TableAdapter ainda não é atender os requisitos do padrão O/R, porém, já temos disponível todas as funções para iniciar nosso primeiro objeto CRUD (Create/Read/Update/Delete).

O TableAdapter já reconhece sua chave primária, e, caso você deseje, ele gera até as procedures para você. Dessa forma, ele se encarrega das ações do CRUD.

Para iniciar nosso artigo crie novo projeto conforme a Figura 01 e adicione um DataSet.


Figura 01 - Projeto inicial.

Logo após adicionar o DataSet, automaticamente será carregado o Wizard do TableAdapter para lhe ajudar a criar as tabelas já com os tipos de acordo com seu banco de dados, assim como todos os conectores. O primeiro passo é você definir os dados da conexão para ter acesso ao BD. Logo em seqüência, será apresentada a tela da Figura 02, onde você vai definir se vai utilizar um Select, criar procedures automaticamente ou utilizar procedures existentes.


Figura 02 - Wizard para configuração do Adapter.

Para esse artigo, vamos seguir na opção "Use SQL statements" para montar um modelo básico. Estaremos também utilizando o banco de dados "Northwind" em conjunto com a Tabela "Products". Na Figura 03, você terá opção de adicionar uma query para consulta ou montar uma personalizada com o assistente Query Builder.


Figura 03 - Adicionando query consulta.

Para esse exemplo, estaremos fazendo uma consulta padrão utilizando o "Select * from Products", para que possamos trazer todas as colunas da tabela Products. Feito isso, basta clicar em próximo. Logo em seguida, será solicitado o nome para o método Fill (Utilizado para preencher DataSet) e para o GetData (Retorna um DataTable). Em seguida, marque a opção GenerateDBDirectMethods (Gerar Insert, Update, Delete individuais). Os próximos passos são representados na Figura 04.


Figura 04 - Todos métodos criados com sucesso.

Após conclusão do Wizard, você já terá disponível em seu objeto todos os métodos do CRUD por meio do TableAdapter, assim como o DataSet conforme Figura 05.


Figura 05 - DataSet "Products" e TableAdapter "ProductsTableAdapter".

Como você tem acompanhado até esse momento, não digitamos nenhuma linha de código e já temos um mecanismo completo para acesso a dados. Basta você acionar o CRUD diretamente pela camada de apresentação. Com o ASP.NET 2.0, você já poderia vincular diretamente por meio de um ObjectDataSource. Para exemplificar melhor, estaremos criando mais uma classe chamada de Produtos para representar sua camada de negócios. Conforme Figura 06, verifique que criamos um método chamado de Incluir e nele estamos executando o método ta.Insert que já está com todos parâmetros necessários a inclusão de um novo registro.


Figura 06 - Adicionando métodos do TableAdapter para operações do CRUD.

Conforme Figura 06, para incluir um novo registro no banco de dados, basta instanciar o TableAdapter e passar os parâmetros. O mesmo vai ocorrer para as operações do CRUD. Ou seja, você não precisou codificar o acesso a dados que nesse exemplo será feito totalmente pelo TableAdapter. Confira na Listagem 01 o exemplo da Classe Produtos.cs que será a nossa camada de negócios.

Produtos.cs
/// <summary>
/// Summary description for Produtos
/// </summary>
public class Produtos

{

/// <summary>
/// Inclui um registro no banco de dados
/// </summary>
/// <param name="NomeProduto"></param>
public void Incluir(string NomeProduto)

{
dsArtigoTableAdapters.ProductsTableAdapter ta =new dsArtigoTableAdapters.ProductsTableAdapter();
//Estou passando apenas a descrição do Produto
ta.Insert(NomeProduto,1,1,"0",0,0,0,0,true);
}

/// <summary>
/// Retorna um DataTable tipado com os dados dos Produtos.
/// </summary>
/// <returns></returns>
public dsArtigo.ProductsDataTable RetornaDados()
{
dsArtigoTableAdapters.ProductsTableAdapter ta =new dsArtigoTableAdapters.ProductsTableAdapter();
return ta.GetData();
}

/// <summary>
/// Atualiza o DataSet diretamente no banco de dados
/// Incluindo,Excluindo,Atualizando registros.

/// </summary>
/// <param name="DataSetArtigo"></param>
/// <returns></returns>
public bool AtualizaDataSet(dsArtigo DataSetArtigo)

{
dsArtigoTableAdapters.ProductsTableAdapter ta =new dsArtigoTableAdapters.ProductsTableAdapter();
ta.Update(DataSetArtigo);
}

}
Listagem 01 - Classe exemplo Produtos chamando TableAdapter.

Observando a Listagem 01, você já deve ter visto que todas as operações já estão cobertas pelo Adapter, onde já é possível também realizar a chamada diretamente pela camada de apresentação no lugar de criar a classe Produtos.CS. Fica à sua escolha.

Caso você esteja acompanhando esse artigo na seqüência que estamos apresentando, chegou o momento de se criar a camada de apresentação conforme Figura 07.


Figura 07 - Tela para teste

A codificação necessária para o funcionamento dessa tela é instanciar nossa classe produtos, chamando os métodos Incluir e RetornaDados conforme Listagem 02.

Apresentação

public partial class _Default : System.Web.UI.Page

{
protected void Button1_Click(object sender, EventArgs e)
{
Produtos NegocioProdutos=new Produtos();
NegocioProdutos.Incluir(this.TextBox1.Text);
}

protected void Button2_Click(object sender, EventArgs e)
{
Produtos NegocioProdutos=new Produtos();
GridView1.DataSource=NegocioProdutos.RetornaDados();
GridView1.DataBind();
}

}
Listagem 02 - Classe exemplo Produtos chamando TableAdapter.

Conforme você acompanhou nesse artigo todo, nosso acesso a dados foi realizado por meio do TableAdapter que se encarregou de realizar as operações da camada de CRUD. A qualquer momento, você pode configurar o Adapter adicionando novos parâmetros de consulta e filtros para recuperar os dados, assim como direcionar o acesso para utilizar procedures, definir uma nova string de conexão e suporte a transações caso necessário.

Código Fonte: [Download]

Esse artigo foi baseado no banco de dados ''NorthWind".

Nenhum comentário até agora

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


Sobre o Autor
Ramon Durães é autor da frase “Não tem que ser difícil”. Possui larga experiência em tecnologia Microsoft. É Microsoft Most Valuable Professional (MVP), Trabalha como Software Engineer na 2pc Professional Consulting onde trabalha com empresas ligadas ao desenvolvimento de software fornecendo amplo suporte na migração para .NET, arquitetura de software e adoção de Visual Studio Team System. Realiza palestras e treinamentos nos maiores eventos do Brasil. Entre em contato pelo blog (http://www.2pc.com.br/).
InterCon 2009

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.