Desenvolvimento - ASP. NET
ASP.NET 2.0 - Data Access Layer com TableAdapter
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.
por Ramon Durães
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 um 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.
/// 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.
//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.
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 a 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çãopublic partial class _Default : System.Web.UI.Page{
{
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".