.NET - Usando Data Access Application Blocks IV
Para encerrar o nosso exemplo de utilização do Data Access Application Blocks - DAAB este artigo vai mostrar como implementar o código para realizar as operações básicas de manutenção de dados usando os métodos da nossa classe contatosDAL criada nos artigos anteriores.
Veja os artigos anteriores em:
Já temos o formulário frmContatos.vb conforme o leiaute da figura abaixo :
DataGridView - dgvContatos 4 controles Buttons: - btnIncluir |
Para tornar mais fácil o entendimento eu vou criar mais 4 formulários relacionados com cada um dos botões do formulário frmcontatos.vb de forma que quando cada um dos botões forem clicados pelo usuário será aberto o respectivo formulário. Então teremos:
1 - frmIncluir.vb - usado para incluir dados na tabela e aberto quando o botão Novo for clicado;
2- frmAlterar.vb - usado para alterar dados da tabela e vinculado ao evento Click do botão Alterar;
3- frmExcluir.vb - usado para excluir dados e acionado pelo evento Click do botão Excluir;
4- frmConsultar.vb - realiza consultas na tabela e aberto quando o botão Consultar for clicado;
O leiaute de cada formulário é bem simples; usei praticamente os controles TextBox e Button.
O código do formulário frmcontatos.vb é dado a seguir a partir dele serão chamados os demais formulários conforme o botão acionado pelo usuário.
Public Class frmContatosPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load carregaDados() End SubPrivate Sub carregadados() 'instancia a classe contatosDAL Dim contatos As New macoratti.contatosDAL 'usa o m‚todo selecionaTodosContatos para preencher o datagridview dgvContatos.DataSource = contatos.selecionTodosContatos() End SubPrivate Sub btnIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluir.Click My.Forms.frmIncluir.ShowDialog() carregadados() End SubPrivate Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click If dgvContatos.SelectedRows.Count > 0 Then My.Forms.frmAlterar.ShowDialog() carregadados() ElseMsgBox( "Selecione um registro.") End If End SubPrivate Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluir.Click 'verifica se foi selecionado um registro no datagridivew If dgvContatos.SelectedRows.Count > 0 Then My.Forms.frmExcluir.ShowDialog() carregadados() Else MsgBox( "Selecione um registro.") End If End SubPrivate Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click My.Forms.frmConsultar.ShowDialog() End Sub Private Sub btnSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSair.Click Me.Close() End Sub
End Class |
Quando o formulário frmcontatos.vb é carregado no evento Load do formulário temos a chamada a rotina carregadados() que irá carregar os dados da tabela Contatos.
Na rotina carregadados() eu tenho o código que vai criar uma instância da classe contatosDAL e em seguida acionar o método selecionaTodosContatos():
'instancia a classe contatosDAL
Dim contatos As New macoratti.contatosDAL
'usa o m‚todo selecionaTodosContatos para preencher o datagridview
dgvContatos.DataSource = contatos.selecionTodosContatos()
O método selecionaTodosContatos invoca a stored procedure sp_SelecionaContatos que executa uma instrução SQL selecionando todos os registros da tabela ordenando-os por pelo campo nome. Note que usamos apenas duas linhas de código para realizar esta tarefa.
Este será o comportamento padrão na execução de todas as tarefas que iremos demonstrar :
1- Incluindo dados com DAAB
Vejamos então como seria o código para incluir um novo contato na tabela Contatos do banco de dados Agenda.mdf. A seguir temos o código do formulário frmincluir.vb que chama a rotina incluiDados();
Public Class frmIncluirPrivate Sub frmIncluir_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load txtNome.Focus() End SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If txtNome.Text = String.Empty And txtEmail.Text = String.Empty Then MsgBox( "Informe o nome/email")Else incluiDaDos() End If End Sub Private Sub incluidados()
Try contatos.incluiContatos(txtNome.Text, txtEmail.Text) MsgBox( "Dados incluidos com sucesso.")Catch ex As Exception MsgBox( "Erro na inclusÆo: " & ex.Message) End Try End SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class |
A rotina incluidados() cria uma instância da classe contatosDAL e em seguida usa o método incluiContatos() passando como parâmetros os dados que vamos inclui , no nosso caso o nome e o email informados no formulário.
Veja como o código do formulário ficou enxuto e fácil de manter.
2- Alterando dados com DAAB
A seguir temos o código formulário frmAlterar onde temos:
1- No evento Load do formulário estou obtendo a linha selecionada do datagridview - dgvcontatos - no formulário frmContatos e exibindo os dados nas caixas de texto do formulário frmAlterar;
2- No evento Click do botão Alterar temos o código que cria a instância da nossa classe contatosDAL e usa o método atualizaContatos passando os parâmetros: codigo , nome e email obtidos do formulário; (O código obtemos do formulário frmContatos); o método usa a stored procedure sp_AlteraContatos para alterar o registro selecionado no datagridview do formulário frmContatos.vb;
Public Class frmAlterar
Dim codigo As Integer
Private
Sub frmAlterar_Load(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
Handles MyBase.Load codigo = frmContatos.dgvContatos.CurrentRow.Index txtNome.Text = frmContatos.dgvContatos.SelectedCells(1).Value
txtEmail.Text = frmContatos.dgvContatos.SelectedCells(2).Value End Sub Private Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click
'usa o m‚todo selecionaTodosContatos para preencher o datagridview contatos.atualizaContatos(codigo, txtNome.Text, txtEmail.Text) MsgBox("Alterado com sucesso") Catch ex As Exception MsgBox("Erro na altera‡Æo: " & ex.Message)
End
Try Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close()
End
Sub End Class
|
3- Excluindo dados com DAAB
O código do formulário frmExcluir.vb é dado a seguir:
Public Class frmExcluir
Dim codigo As Integer Private Sub frmExcluir_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
codigo = frmContatos.dgvContatos.CurrentRow.Index txtNome.Text = frmContatos.dgvContatos.Item(1, codigo).Value txtEmail.Text = frmContatos.dgvContatos.Item(2, codigo).Value End Sub Private Sub btnExcluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluir.Click
'instancia a classe contatosDAL Dim contatos As New macoratti.contatosDAL Try 'usa o m‚todo selecionaTodosContatos para preencher o datagridview contatos.excluiContatos(codigo) MsgBox("Excluido com sucesso") Catch ex As Exception MsgBox("Erro na exclusÆo : " & ex.Message) End Try End SubPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class |
Nele podemos destacar:
1- No evento Load do formulário estou obtendo a linha selecionada do datagridview - dgvcontatos - no formulário frmContatos e exibindo os dados nas caixas de texto do formulário frmExcluir;
2- No evento Click do botão Excluir temos o código que cria a instância da nossa classe contatosDAL e usa o método excluiContatos passando o parâmetro: codigo obtido do formulário frmContatos; este método invoca a stored procedure sp_ExcluiContatos para excluir o registro selecionado;
4- Consultando dados com DAAB
A seguir temo o código do formulário frmConsultar.vb :
Imports System.Data
Public Class frmConsultarPrivate Sub btnSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSair.Click Me.Close() End Sub Private Sub frmConsulta_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load txtCodigo.Focus() End SubPrivate Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click
MsgBox("Informe o codigo a consultar...") Else Dim cod As Integer cod = CType(txtCodigo.Text, Integer) pesquisaContatosCodigo(cod) 'pesquisaContatosGrid() 'pesquisaContatosGridOtimizada() End If End SubPublic Sub pesquisaContatosCodigo(ByVal codigo As Integer)
Dim ds As DataSet = Nothing 'instancia a classe contatosDAL Dim contatos As New macoratti.contatosDAL
Try 'usa o m‚todo selecionaTodosContatos para preencher o datagridview ds = contatos.selecionaContatoPorCodigo(codigo) txtNome.Text = ds.Tables(0).Rows(0)(1) txtEmail.Text = ds.Tables(0).Rows(0)(2) Catch ex As Exception MsgBox(ex.Message) End Try End Sub
'------------OUTRAS ROTINAS PARA EFETUAR UMA BUSCA NO DATAGRIDIVEW--------------------------------------------- Public Sub pesquisaContatosGrid()
Dim texto As String = Nothing 'percorre cada linha do DataGridView For Each linha As DataGridViewRow In frmContatos.dgvContatos.Rows 'percorre cada c‚lula da linha For Each celula As DataGridViewCell In frmContatos.dgvContatos.Rows(linha.Index).Cells 'se a coluna for a coluna 1 (Nome) entÆo verifica o criterio If celula.ColumnIndex = 0 Then texto = celula.Value.ToString 'se o texto informado estiver contido na c‚lula entÆo seleciona toda linha If texto.Contains(txtCodigo.Text) Then Dim codigo As Integer = 0 'seleciona a linha frmContatos.dgvContatos.CurrentCell = celula 'obtem o indice da linha codigo = frmContatos.dgvContatos.CurrentRow.Index 'exibe os dados txtNome.Text = frmContatos.dgvContatos.Item(1, codigo).Value txtEmail.Text = frmContatos.dgvContatos.Item(2, codigo).Value 'sai do laÇO Exit Sub End If End If Next Next MsgBox( "Registro nao localizado.") End SubPublic Sub pesquisaContatosGridOtimizada()
Dim texto As String = Nothing Dim celula As DataGridViewCell Dim contagem As Integer'percorre cada linha do DataGridView For Each linha As DataGridViewRow In frmContatos.dgvContatos.Rowscelula = linha.Cells(0) 'Öndice 0 = coluna codigo'obtem o texto da celula texto = celula.Value.ToString() 'se o texto informado estiver contido na c‚lula entÆo seleciona toda linha If texto.Contains(txtCodigo.Text) Then Dim codigo As Integer 'seleciona a linha frmContatos.dgvContatos.CurrentCell = celula 'obtem o indice da linha codigo = frmContatos.dgvContatos.CurrentRow.Index 'exibe os dados txtNome.Text = frmContatos.dgvContatos.Item(1, codigo).Value txtEmail.Text = frmContatos.dgvContatos.Item(2, codigo).Value Exit Sub End If contagem = contagem + 1 If contagem = frmContatos.dgvContatos.RowCount - 1 Then Exit Sub End If Next End Sub End Class |
O código do formulário esta mais extenso porque eu resolvi incluir duas rotinas extras para realizar a busca dos dados; dessa forma teremos 3 rotinas para efetuar a busca:
pesquisaContatosCodigo(cod)
pesquisaContatosGrid()
pesquisaContatosGridOtimizada()
A rotina pesquisaContatosCodigo(cod) é a que usa o método definido na classe contatosDAL e usa o método elecionaContatoPorCodigo(codigo) para selecionar um registro da tabela usando o código como parâmetro para busca;
As outras duas rotinas foram colocadas para mostrar outras alternativas de busca. Elas não usam o dataset e percorrem o datagridview usando um laço foreach procurando o código informado.
Com isso concluímos o nosso artigo sobre a utilização do Data Access Block no VB .NET ; lembrando que usamos o VB 2008 Express e o Enterprise Library 3.1 - May 2007 ambos gratuitos de forma a incentivar a adoção de boas práticas de desenvolvimento de software.
Aguarde mais artigos relacionados ao assunto em breve.
Pegue a aplicação completa aqui : vb8_DABB.zip
Eu sei , é apenas VB .NET , mas eu gosto..
referências:
José Carlos Macoratti