.NET
- Usando Data Access Application Blocks III
No artigo anterior iniciei o nosso exemplo para usar o Data Access Application Blocks - DAAB criando a base de dados, a tabela, as stored procedures e preparando o ambiente para referenciar a Enterprise Library.
Vamos continuar criando uma classe onde iremos definir os métodos de acesso aos dados usando a DAAB. Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add -> New Item;
Na janela Add New Item selecione o template Class e informe o nome contatosDAL;
Agora vamos criar 5 métodos relacionados com as stored procedures que já criamos e que irão realizar as seguintes operações:
A primeira coisa a fazer é definir os namespaces para as classes que vamos usar. Portanto no início da classe declare os seguintes imports:
Nota: No VB .NET o comando Imports deve ser colocado no topo do código antes de todo e qualquer comando, exceto a declaração Option;
Imports
Microsoft.Practices.EnterpriseLibrary.Data1- O primeiro método eu vou nomear como selecionaTodosContatos, e irá retornar todos os contatos; desta forma vamos usar a stored procedure sp_SelecionaContatos para retornar todos os contatos, preencher um DataTable e retorná-lo. O código é dado a seguir:
Public Function
selecionaTodosContatos() As DataTable 'define um objeto DataVase Dim agenda As Database = DatabaseFactory.CreateDatabase()
contatos.Load(dr)
End
Using
|
Notou como temos um código mais limpo e fácil de ler e manter. Estamos usando os métodos do DAAB definidos na Enterprise Library.
Nota: Estamos usando o comando
Using O objeto que for instanciado via comando “Using“, quando sair do escopo será automaticamente liberado; i.e, será feita uma chamada ao “Dispose” do objeto de forma automática. O comando Using funciona como um atalho ao comando Try/Catch/Finally, pois quando o compilador gera o assembly em IL, o comando é traduzindo para uma instrução idêntica a instrução nativa do Try/Finally. |
2- O segundo método , chamado incluirContatos, irá incluir novos contatos na tabela Contatos e vai usar a stored procedure sp_IncluiContatos. Teremos que passar dois parâmetros : nome e email e obter a data do sistema usando a função . O código completo do método é o seguinte:
Public Sub incluiContatos(ByVal nome As String, ByVal email As String)'define o objeto DataBase Dim iContatos As Database = DatabaseFactory.CreateDatabase()
iContatos.AddInParameter(cmd, "@nome", DbType.String, nome) iContatos.AddInParameter(cmd, "@email", DbType.String, email)
iContatos.ExecuteNonQuery(cmd)
End Sub |
Veja que com apenas 6 linhas de código criamos a rotina de inclusão.
3- O terceiro , chamado excluiContatos, irá excluir contatos já cadastrados na tabela Contatos e vai usar a stored procedure sp_ExcluiContato. Não há parâmetros nesta rotina. O código completo do método é o seguinte:
Public Sub excluiContatos(ByVal codigo As Integer)'define o objeto DataBase Dim exc_Contatos As Database = DatabaseFactory.CreateDatabase()
exc_Contatos.AddInParameter(cmd, "@codigo", DbType.Int32, codigo)
exc_Contatos.ExecuteNonQuery(cmd)
|
4- O quarto método , chamado selecionaContatoPorCodigo, irá selecionar um contato pelo código informado como parâmetro. Aqui estamos usando a stored procedure sp_SelecionaContatoPorCodigo e passando o parâmetro codigo. Será retornado um dataset com os dados obtidos. Veja o código a seguir:
Public Function selecionaContatoPorCodigo(ByVal codigo As Integer) As DataSet'define o objeto DataBase Dim seleCod_Contatos As Database = DatabaseFactory.CreateDatabase()
seleCod_Contatos.LoadDataSet(cmd, ds, "Contatos")
End Function |
5- O último método , chamado atualizaContatos, irá atualizar os contatos da tabela Contatos. Aqui estamos usando 3 parâmetros : codigo, nome e email e a stored procedure sp_AlteraContatos. Veja o código abaixo:
Public Sub
atualizaContatos(ByVal codigo
As Integer,
ByVal nome As
String, ByVal
email As String) 'define o objeto DataBase Dim alt_Contatos As Database = DatabaseFactory.CreateDatabase()
alt_Contatos.AddInParameter(cmd, "@codigo", DbType.Int32, codigo) alt_Contatos.AddInParameter(cmd, "@nome", DbType.String, nome) alt_Contatos.AddInParameter(cmd, "@email", DbType.String, email)
alt_Contatos.ExecuteNonQuery(cmd)
|
Com isso terminamos de definir os métodos que iremos usar em nossa aplicação em todos eles usamos os métodos das classes presentes no DAAB.
A classe abstrata DataBase fornece diversos métodos que podemos usar conforme o nosso interesse. A seguir relaciono alguns deles:
O método CreateDataBase da classe DataBaseFactory irá retornar uma instância de um banco de dados a partir das configurações que forem definidas no arquivo de configuração. No nosso exemplo o arquivo App.Config.
Podemos então ter vários banco de dados definidos no arquivo de configuração. Veja abaixo um arquivo de configuração com mais dois bancos de dados definidos: 1 banco de dados Access(Teste) e outro SQL Server Compact(Vendas) , além do nosso banco de dados Agenda.mdf:
<? xml version="1.0" encoding="utf-8"?>< configuration>< configSections>< section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /></ configSections>< connectionStrings>< add name="Agenda" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Agenda.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" />
< dataConfiguration defaultDatabase="Agenda"/></ configuration>
|
Eles são diferenciados pelo nome dado a string de conexão através da propriedade name. Podemos definir então qual banco de dados iremos usar definindo o <dataConfiguration defaultDataBase>.
O método CreateDataBase aceita um argumento que representa uma entrada de uma instância de um DataBase no arquivo de configuração. Alterando esta instância podemos alterar o tipo de objeto de banco de dados que o método irá retornar. Percebeu que não precisamos declarar objetos SQLDataBase , pois estou usando a classe base , DataBase, abstraindo assim o meu código do provedor. Tudo isso é feito usando o padrão Factory.
Como a classe DataBaseFactory é NotInheritable (Sealed) ela não pode ser herdada, e o seu construtor é privado de modo que ela não pode também ser instanciada diretamente. Com isso podemos chamar o método estático CreateDataBase sem ter que criar uma instância da sua classe.
Como estamos usando stored procedures estou usando o método GetStoredProcCommand para executar cada uma das stored procedures definidas. Se eu quiser comandos SQL temos o método GetSqlStringCommand.
Vamos agora criar um formulário para centralizar estas operações.
Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add -> New Item; e a seguir selecione Windows Forms e informe o nome frmContatos.vb.
Defina neste formulário o leiaute conforme a figura abaixo. Nela temos os seguintes componentes:
![]() |
DataGridView - dgvContatos 4 controles Buttons: - btnIncluir |
No próximo artigo irei mostrar como implementar o código de cada um dos botões para realizar as operações básicas de manutenção de dados usando os métodos da nossa classe contatosDAL.
Veja continuação no artiigo... Usando Data Access Application Blocks IV
Eu sei , é apenas VB .NET , mas eu gosto..
referências:
José Carlos Macoratti