Conexões Genéricas a Banco de Dados com o Visual Basic.Net 2005

Neste artigo mostro como realizar conexões genéricas com Banco de dados utilizando o Visual Studio.Net 2005 (VB.Net)

Neste artigo/exemplo mostrarei como criar uma conexão genérica para qualquer banco de dados utilizando o ADO.Net. Inicialmente vamos falar sobre a forma padrão de conexão a um Banco de Dados onde temos um aplicativo que deverá realizar uma conexão com os seguintes banco de dados : SQL Server, Access, MySQL, PostGres, Oracle, etc. Neste caso teríamos de utilizar asp e cs onde temos um aplicativo que dever um provedor específico para cada banco de dados: OleDB para o Access, SqlCliente para o SQLServer, entre outros e além do provedor deveríamos ter uma string de conexão diferente para cada banco de dados.

Neste exemplo, a ideia é criar um código independente do provedor de acesso aos dados de forma simples e independente de referenciar cada provedor específico.

Para desenvolver essa solução o Visual Basic.Net 2005 possui um conjunto de interfaces usadas para implementar as classes específicas para cada provedor, dessa forma não é necessário referenciar uma classe específica (SQLClient,OleDB) mas a interface implementada.

Por exemplo, queremos criar um objeto conexão para o SqlClient. Da forma tradicional temos: Dim conn as new SqlClient(). Utilizando interfaces fazermos uma referência a interface IDbConnection. Dessa forma a declaração do objeto conexão ficaria: Dim conn as IDbConnection

Assim como na declaração do objeto conexão, podemos declarar os demais objetos para acesso a dados conforme vemos na lista abaixo:

Dim adapter As IDbDataAdapter Dim comando As IDbCommand Dim reader As IDbDataReader

Para exemplificar a situação descrita acima, desenvolvi uma classe de acesso a Banco de Dados. Para este exemplo utilizei conexão genérica para uma base de dados no Microsoft Access e no MySql.

Classe para banco de dados genérico

Neste classe existe três funções que retornam os respectivos objetos de Banco de Dados a partir de um Banco de dados escolhido

Fiz esse exemplo usando duas fontes de dados, o ACCESS e o MYSQL 5

Public Class BDGenerico função publica que retorna a conexao para o banco de dados escolhido Public Function RetornaConexao(ByVal BDEscolhido As String) As System.Data.IDbConnection If BDEscolhido = "ACCESS" Then se o banco de dados for access Return New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Application.StartupPath & "\teste.mdb") Else se o banco de dados for MYSQL Return New MySql.Data.MySqlClient.MySqlConnection("server=localhost;user id=root;password=ilheus10;database=Teste") End If End Function
Public Function RetornaAdapter(ByVal BDEscolhido As String) As System.Data.IDataAdapter If BDEscolhido = "ACCESS" Then se o BD escolhido for access Return New System.Data.OleDb.OleDbDataAdapter() Else se o BD escolhido for MYSQL Return New MySql.Data.MySqlClient.MySqlDataAdapter() End If End Function
Função publica que retorna um adapter para o banco de dados escolhido
Public Function RetornaComand(ByVal BDEscolhido As String) As System.Data.IDbCommand If BDEscolhido = "ACCESS" Then se BD escolhido for access Return New OleDb.OleDbCommand Else se BD escolhido for MYSQL Return New MySql.Data.MySqlClient.MySqlCommand End If End Function End Class
Função publica que retorna um command para o banco de dados escolhido

Após a implementação da Classe, irei utilizá-la através do formulário abaixo:

Nessa aplicação Windows Forms, tenho uma combobox que lista os bancos de dados Disponíveis: Accesse MySql. Além da combobox existe uma datagrid para exibir os dados do banco de dados escolhidos, uma textbox para informar um dado a ser buscado e a outra textbox que exibe o resultado da consulta.

Vejamos o código da implementação do formulário: Esse exemplo mostra como criar um BD Genérico para um sistema Existe um módulo no qual estão as funções que retornam os respectivos objetos do banco de dados que é escolhido para o usuário

Imports System.Data Public Class Form1 Dim BDEscolhido As String variavel publica que recebe o banco de dados escolhido a partir de uma COMBOBOX Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged BDEscolhido = ComboBox1.SelectedItem variável BDEscolhido recebe o item selecionado na combobox End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Dim conexao As IDbConnection = BDGenerico.RetornaConexao(BDEscolhido) conexao recebe a o retorno da função RetornaConexão que retorna a conexão para o banco escolhido Dim adapter As IDbDataAdapter = BDGenerico.RetornaAdapter(BDEscolhido) conexao recebe a o retorno da função RetornaAdapter que retorna um adapter para o banco escolhido Dim command As IDbCommand = BDGenerico.RetornaComand(BDEscolhido) conexao recebe a o retorno da função RetornaConexão que retorna um comando para o banco escolhido command.Connection = conexao command.CommandText = "Select * From Nomes" adapter.SelectCommand = command Dim ds As New DataSet adapter.Fill(ds) preenche o DataSet DataGridView1.DataSource = ds.Tables(0) preeche a grid com a tabela Nomes Catch ex As Exception MsgBox(ex.Message) End Try End Sub
Botão que exibe na datagrid todos os Códigos e Nomes presentes no Banco de Dados
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim conexao As IDbConnection = BDGenerico.RetornaConexao(BDEscolhido) declarando uma conexão Dim command As IDbCommand = BDGenerico.RetornaComand(BDEscolhido) declarando um objeto command conexao.Open() abrindo a conexao command.Connection = conexao command.CommandText = "Select Nome from Nomes where Codigo =" & TextBox1.Text Dim datareader As IDataReader datareader = command.ExecuteReader datareader.Read() TextBox2.Text = datareader("Nome") recebe o nome armazenado em um datareader conexao.Close() End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ComboBox1.SelectedItem = 1 inicia a combobox com o item ACCESS End Sub End Class
Botão que pesquisa um nome a partir de um código

Ao final do artigo temos uma classe e um formulário que acessa a classe que contém o código para conexão genérica com o banco de dados. Espero que esse artigo/exemplo seja útil a todos.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados