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 utilzarasp eríamos 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 idéia é 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

 

    função publica que retorna um adapter para o banco de dados escolhido

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

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

bdGenerico.JPG

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

 

    botão que exibe na datagrid todos os Códigos e Nomes presentes no Banco de Dados

    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 pesquisa um nome a partir de um código

    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

 

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.