.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
- btnAlterar
- btnExcluir
- btnConsultar
- btnSair

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 TextBoxButton.

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 frmContatos
 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    carregaDados()

End Sub

 

Private 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 Sub

 

Private Sub btnIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluir.Click

    My.Forms.frmIncluir.ShowDialog()

    carregadados()

End Sub

 

Private 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()

Else

        MsgBox("Selecione um registro.")

End If

End Sub

 

Private 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 Sub

 

Private 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 frmIncluir
 

Private Sub frmIncluir_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    txtNome.Focus()

End Sub
 

Private 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()


 
  Dim contatos As New
macoratti.contatosDAL

    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 Sub
 

 Private 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


'instancia a classe contatosDAL

Dim contatos As New macoratti.contatosDAL


Try

      '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
 

End Sub


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 Sub

 

Private 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 frmConsultar

Private 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 Sub

 

Private Sub btnConsultar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConsultar.Click


   If
txtCodigo.Text = String.Empty
Then

       MsgBox("Informe o codigo a consultar...")

    Else

         Dim cod As Integer

       cod = CType(txtCodigo.Text, Integer)

           pesquisaContatosCodigo(cod)

           'pesquisaContatosGrid()

        'pesquisaContatosGridOtimizada()

     End If

End Sub

 

Public 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 Sub

 

Public 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.Rows

    celula = 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:

  1. pesquisaContatosCodigo(cod)

  2. pesquisaContatosGrid()

  3. 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