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