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