VB.NET - Usando Procedimentos Armazenados no MsAccess - I


No artigo - VB.NET - Criando Procedimentos Armazenados no MsAccess - vimos como podemos criar procedimentos armazenados no msAccess.

Agora que você já sabe criar procedimentos armazenados que tal usá-los ?

È justamente isto que vou mostrar como fazer. Vamos criar uma camada de acesso a dados usando os procedimentos armazenados que vai atuar como um componente entre a aplicação a base de dados. Isto é de grande ajuda pois torna o seu código quase independente do banco de dados de forma que qualquer alteração será menos traumática.

Usando procedimentos Armazenados para turbinar seus projetos

Vamos criar uma classe onde iremos criar métodos que irão permitir usar os procedimentos armazenados que já criamos anteriormente. Só para lembrar temos 4 procedimentos armazenados já criados:

  1. spAtualizaProdutos
  2. spDeletaProduto
  3. spIncluiProduto
  4. spListaProdutos

Inicie um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET e a seguir inclua um módulo de classe na aplicação dando a este módulo de classe o nome de AcessoBD.vb.

A seguir inclua o seguinte código no módulo de classe:

Imports System
Imports System.Data
Imports System.Data.OleDb

' Métodos da classe DB que usam os procedimentos armazenados
Public Class AcessoBD

    ' verifique a localização correta do banco de dados no seu ambiente
    Shared connectionString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb"

    ' Este método retorna um dataset com todos os registros da tabela Products
    Function listarProdutos() As DataSet
        Dim con As OleDbConnection
        Dim da As OleDbDataAdapter
        Dim ds As DataSet
        Dim sSQL As String
        sSQL = "EXECUTE spListaProdutos"

        con = New OleDbConnection(connectionString)
        da = New OleDbDataAdapter(sSQL, con)
        ds = New DataSet
        da.Fill(ds, "Products")
        Return ds
    End Function
    ' Este método incluir uma nova linha na tabela
    Sub incluirProdutos(ByVal ProductName As String, ByVal SupplierID As Integer, ByVal CategoryID As Integer, _ 
                                  ByVal QuantityPerUnit As String, ByVal UnitPrice As Double, ByVal UnitsInStock As Integer, 
                                  ByVal UnitsOnOrder As Integer, ByVal ReorderLevel As Integer)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand
        Dim paramNomeProduto As New OleDbParameter
        Dim paramCodigoFornecedor As New OleDbParameter
        Dim paramCodigoCategoria As New OleDbParameter
        Dim paramQuantidade As New OleDbParameter
        Dim paramPreco As New OleDbParameter
        Dim paramEstoque As New OleDbParameter
        Dim paramPedido As New OleDbParameter
        Dim paramMinimo As New OleDbParameter
        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramNomeProduto
            .ParameterName = "nomeProduto"
            .OleDbType = OleDbType.VarChar
            .Size = 40
            .Value = ProductName
        End With
        cmd.Parameters.Add(paramNomeProduto)

        With paramCodigoFornecedor
            .ParameterName = "codFornecedor"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = SupplierID
        End With
        cmd.Parameters.Add(paramCodigoFornecedor)
        With paramCodigoCategoria
            .ParameterName = "codCategoria"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = CategoryID
        End With
        cmd.Parameters.Add(paramCodigoCategoria)
        With paramQuantidade
            .ParameterName = "quantidade"
            .OleDbType = OleDbType.VarChar
            .Size = 20
            .Value = QuantityPerUnit
        End With
        cmd.Parameters.Add(paramQuantidade)
        With paramPreco
            .ParameterName = "precoUnitario"
            .OleDbType = OleDbType.Currency
            '.Size =  
            .Value = UnitPrice
        End With
        cmd.Parameters.Add(paramPreco)

        With paramEstoque
            .ParameterName = "uniEstoque"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = UnitsInStock
        End With
        cmd.Parameters.Add(paramEstoque)
        With paramPedido
            .ParameterName = "uniPedido"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = UnitsOnOrder
        End With
        cmd.Parameters.Add(paramPedido)

        With paramMinimo
            .ParameterName = "nivelUnidade"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = ReorderLevel
        End With
        cmd.Parameters.Add(paramMinimo)
        cmd.CommandText = "EXECUTE spIncluiProduto"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()
    End Sub

    ' Este método atualiza um produto 
    Sub atualizarProdutos(ByVal ProductID As Integer, ByVal ProductName As String)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand
        Dim paramNomeProduto As New OleDbParameter
        Dim paramCodigoProduto As New OleDbParameter

        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramCodigoProduto
            .ParameterName = "codigoProduto"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = ProductID
        End With
        cmd.Parameters.Add(paramCodigoProduto)

        With paramNomeProduto
            .ParameterName = "nomeProduto"
            .OleDbType = OleDbType.VarChar
            .Size = 40
            .Value = ProductName
        End With
        cmd.Parameters.Add(paramNomeProduto)

        cmd.CommandText = "EXECUTE spAtualizaProdutos"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()

    End Sub

    ' Este método exclui um produto
    Sub deletarProdutos(ByVal ProductID As Integer)
        Dim con As OleDbConnection
        Dim cmd As OleDbCommand = New OleDbCommand
        Dim paramCodigoProduto As New OleDbParameter

        con = New OleDbConnection(connectionString)
        cmd.Connection = con

        With paramCodigoProduto
            .ParameterName = "codigoProduto"
            .OleDbType = OleDbType.Integer
            .Size = 4
            .Value = ProductID
        End With
        cmd.Parameters.Add(paramCodigoProduto)

        cmd.CommandText = "EXECUTE spDeletaProduto"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()
    End Sub
End Class

A classe AcessoBD possui quatro métodos que usam os procedimentos armazenados criados anteriormente , são eles:

  1. listarProdutos
  2. incluirProdutos
  3. atualizarProdutos
  4. deletarProdutos

Vamos agora aos destaques do código da nossa classe AccessoBD:

1- Como o acesso vai ser feito a uma base de dados Access a primeira coisa a fazer é a declaração dos imports usados no projeto:

Imports System
Imports System.Data
Imports System.Data.OleDb

A library  System.Data  é necessária para quase todas as aplicações de acesso a dados.
A library  System.Data.OleDb é especifica para o provedor OleDb que pode ser usado com o Access e outros banco de dados relacionais

2- A definição da classe  - Public Class AcessoBD - defina o nome da classe usando o modificador Public o que a torna acessível para outros módulos.

2- A definição da string de conexão :

Shared connectionString As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb"

usa o modificador Shared o que torna a variável uma variável de classe ,ou seja, uma variável que esta associada a classe e não a uma instância de um objeto da classe. Com isto ela fica visível por toda a classe.

3- Os parâmetros são usados no código da seguinte forma :

 Dim paramNomeProduto As New OleDbParameter
 ...
 ...
 With paramNomeProduto
            .ParameterName = "nomeProduto"
            .OleDbType = OleDbType.VarChar
            .Size = 40
            .Value = ProductName
        End With
 
 cmd.Parameters.Add(paramNomeProduto)

Este código configura a propriedade parmNomeProduto do tipo Parameter atribui ao mesmo um nome (nomeProduto) , um tipo (OleDbType.VarChar) , um tamanho (40) e um valor (ProducName) que onde o parâmetro atuará, isto é, o valor de ProductName recebido como parâmetro pelo método será atribuído ao parâmetro - nomeProduto - definido no código.

4-  Para chamar e executar o procedimento armazenado usamos objeto command definido e usando a propriedade ExecuteNonQuery().

        Dim cmd As OleDbCommand = New OleDbCommand
        ......
        ......
        cmd.CommandText = "EXECUTE spAtualizaProdutos"
        con.Open()
        cmd.ExecuteNonQuery()
        con.Close()
Perceba que a conexão é fechada logo após a execução do comando.

Bem , agora só falta criar um projeto para usar a nossa classe AcessoBD criada.

Para não ficar muito longo vou continuar o assunto em outro artigo.

Acompanhe o projeto no link : VB.NET - Usando Procedimentos Armazenados no MsAccess II


José Carlos Macoratti