VB 2005  - Criando uma classe para acesso a dados


É uma prática recomendável criar uma camada de acesso a dados e encapsular o seu código. Você ganha em produtividade e facilita a manutenção.

A seguir apresento algumas sugestões de classes com código de acesso a dados que você pode usar em seus projetos.

Abra o Visual Basic 2005 Express e crie um projeto do tipo Windows Application  onde serão criadas as classes.

No menu Project clique na opção Add Class e na janela Add New Item selecione o template Class informando o nome acessoBD. Será criado o arquivo  acessoBD.vb onde podemos criar as nossas classes para acesso a dados. Neste arquivo podemos criar uma ou várias classes.

Começamos criando a classe AcessoBD com um construtor vazio e outro construtor onde definimos a string de conexão. O método getConexao retorna a conexão aberta e o método closeConexao fecha a conexão;

Nota: O modelo de configuração de formulário (Configuration Forms) não esta disponível em projetos Class Library pois não temos um arquivo App.Config para a DLL.

Para ler o arquivo de configuração App.Config em sua aplicação VB 2005 , e exibir o resultado no console , você pode usar o seguinte código:

Private Shared Sub ShowConfig()

For Each key As String In ConfigurationManager.AppSettings
    Dim value As String = ConfigurationManager.AppSettings(key)
    Console.WriteLine("Chave: {0}, Value: {1}", key, value)
Next
End Sub

Vamos criar a seguir dois métodos sobrecarregados onde poderemos passar o nome de um procedimento armazenado - Stored Procedure - com parâmetros e no outro uma instrução SQL retornando um DataReader:

Veremos a seguir um exemplo de como usar as classes acima em um formulário Windows Forms.

Aproveitando o mesmo projeto onde criamos a classe AcessoBD inclua no formulário form1.vb um controle ListBox e um botão de comando. No evento Click do botão de comando inclua o seguinte código:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


'obtem a string de conexão do arquivo de configuração App.Config

Dim strCon = My.Settings.NORTHWNDConnectionString


'cria uma instância da classe AccessBD usando o construtor

'que usa a string de conexao

Dim oDB As New AcessoDB(strCon)

Dim dr As SqlDataReader


'chama o método retornaDataReader passando uma instrução SQL

dr = oDB.retornaDataReader("Select * from Customers")


'percorre o datareader e exibe os dados no listbox

Do While dr.Read

    ListBox1.Items.Add(dr(0) & " - " & dr(1))

Loop
 

End Sub

O resultado será o preenchimento do ListBox conforme figura abaixo:

Vamos agora criar um método que retorna um DataSet  e que recebe o nome da stored procedure , o nome do DataTable a ser preenchido e a coleção de parâmetros:

Para usar o exemplo acima irei acessar o banco de dados Northwind.mdf e usar a stored procedure CustOrderHist existente. Esta stored procedure possui o parâmetro @CustomerID que deve ser informado para o método juntamente como valor de retorno desejado. O DataTable retornado irá ser exibido em um controle DataGridView no formulário;

Nota: A stored procedure CustOrderHist possui o seguinte código:

 A seguir inclua o código abaixo no evento Load do formulário:

Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


'obtem a string de conexão do arquivo de configuração App.Config

Dim strCon = My.Settings.NORTHWNDConnectionString


'cria instância da classe acessoBD

Dim oDados As New AcessoDB(strCon)


'define um dataset

Dim ds As New DataSet


'obtem o dataset passando o nome da Stored Procedure, o parametro e o valor do parametero (codigo do cliente=ALFKI)

ds = oDados.retornaDataSet("CustOrderHist", "CustOrderHist", New SqlParameter("@CustomerID", "ALFKI"))


'se há dados preenche o datagridview

If ds.Tables(0).Rows.Count > 0 Then

     DataGridView1.DataSource = ds.Tables(0)

Else

   MsgBox("Não há dados para este criterio")

End If

End Sub

Executando o projeto para a stored procedure CustOrderHist e o cliente ALFKI iremos obter:

Note que a classe definida efetua o acesso ao banco de dados SQL Server e que eu não efetuei um tratamento de exceção nas mesmas. Deixo esta tarefa para você (dica:  você pode apenas lançar a exceção (throw ex) ).  Você pode criar mais métodos ou adaptar os métodos definidos ao seu projeto.

Pegue o projeto completo aqui: acessoDadosNet.zip

Aguardo você no próximo artigo .NET... 


José Carlos Macoratti