VB.NET - Criando uma Conexão Genérica
Procurando no site achei dois artigos que relacionados ao tema : Como criar uma conexão genérica com um banco de dados ?
Vou colocar novamente o problema para, em seguida, mostrar outra solução possível.
Vamos supor que você tenha que criar uma aplicação que realize uma conexão com os seguintes banco de dados : Access, MSDE, MySQL e FireBird.
Como você faria ?
Você já deve saber que cada um destes banco de dados possui um provedor específico :
Access : provedor OleDB
MSDE : provedor SqlClient
MySQL : provedor MySql Connector .NET (http://dev.mysql.com/downloads/connector/net/)
FireBird : provedor FireBird .NET Connector (FireBird .NET Provider)
Deve saber também que cada um usa uma string de conexão diferente :
Access : Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb
MSDE : Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Master;Data Source=MACORATI\VSDOTNET
MySQL : Server=localhost;user id=root;password=mac;database=northwind
FireBird : User=SYSDBA;Password=masterkey;Database=d:\teste\cadastro.gdb;DataSource=localhost;Port=3050;Dialect=3;
Nota: As strings para conexão acima não são únicas e podem variar de acordo com o ambiente, o banco de dados e a tabela.
Se pensou em criar um código independente do provedor de acesso aos dados acertou . Mas como fazer isto ?
Neste artigo vou mostrar como você pode criar uma conexão com cada um dos banco de dados mencionados de forma simples sem precisar referenciar cada provedor específico.
Vamos criar um código para acessar de forma transparente os 4 banco de dados acima (você pode implementar para mais banco de dados relacional) apenas mudando a string de conexão.
Nota: a limitação a esta solução esta no fato de que é preciso usar comandos SQL padronizados pela norma ANSI 92 .
O pulo do gato para resolver o problema é usar as interfaces usadas para implementar as classes específicas para cada provedor.
Não vamos referenciar uma classe específica mas sim a interface que é implementada por cada classe. Por exemplo:
Não vou referenciar a classe SqlConnection mas a interface IDbConnection. Com isto eu tenho uma referência genérica que vai funcionar com qualquer instância de conexão para um banco de dados específico.
Ex:
Cria uma referência a interface IDbConnection : Dim comexao as IDbConnection
Agora posso instanciar de forma dinâmica qualquer objeto conexão que eu quiser:
conexao = new SqlClient.SqlConnection ou conexao = new OleDb.OleDb.Connection
Entendeu ?
Da mesma forma eu faço para os demais objetos :
Dim cmd As IDbCommand
Dim dr As IDbDataReader
Dim da As IDbDataAdapter
Se você não tem o conceito de interface precisa parar aqui e dar uma olhada no artigo : Net- Trabalhando com objetos
Criando o projeto para conexão Genérica
Vamos então ao que realmente interessa: Criar o projeto que efetua a conexão com os 4 tipos de banco de dados mencionados.
Para testar este código em sua máquina local você vai precisar ter instalado os banco de dados : Access , MSDE , MySQL e FireBird (felizmente eu tenho...) e cada um dos provedores para MySQL e FireBird.
Se não tiver leia os artigos relacionados que mostra como fazer a instalação para o MSDE , MySQL e FireBird
Inicie um novo projeto no VS.NET do tipo Windows Application usando a linguagem VB.NET.
No formulário padrão - form1.vb - inclua os seguintes componentes :
Label - Label1
ComboBox - cboTipoBD
DataGrid - dgCustomers
Button - btnPreencheGrid
Note que o projeto exibe as referências aos provedores que serão usados para conexão com cada um dos banco de dados. Abaixo eu estou repetindo o roteiro para o MySQL e para o FireBird:
Para o MySQL :
Neste momento devemos incluir no projeto uma referência ao provedor MySQL Connector/NET que foi instalado. Para isto clique com o botão direito do mouse sobre o projeto e selecione a opção Add Reference.
Na janela Add Reference escolha a opção MySQL.Data.dll conforme abaixo:
Para o FireBird :
Vamos agora fazer a referência ao provedor FireBird .NET Provider que você já instalou. Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add Reference.
Na janela Add Reference localize o componente Firebird .NET Provider , clique em Select e a seguir em OK.
Agora vamos ao código do projeto:
No evento Load do formulário teremos o código que preenche a combobox com os tipos de banco de dados usados no artigo:
Private Sub Form1_Load(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
Handles MyBase.Load
cboTipoBD.Items.Add("Access") cboTipoBD.Items.Add("MSDE") cboTipoBD.Items.Add("MySql") cboTipoBD.Items.Add("FireBird") cboTipoBD.SelectedIndex = 0 End Sub |
No evento Click do botão de comando inclua o seguinte código :
Private Sub btnPreencheGrid_Click(ByVal
sender As System.Object,
ByVal e As System.EventArgs)
Handles btnPreencheGrid.Click
Dim cn As System.Data.IDbConnection = GetConnection()
da = GetDataAdapter(cn) Else MsgBox("A conexão esta vazia !") Exit Sub End If
da.Fill(ds) dgCustomers.DataSource = ds.Tables(0) Catch ex As Exception MsgBox(ex.Message) Finally 'sempre fecha a coenxao cn.Close()
End
Try |
Neste código estamos usando duas funções muito importantes :
1- GetConnection() - que irá retornar a conexão de acordo com o banco de dados selecionado :
Aqui eu apenas usei as strings de conexão para cada banco de dados. Observando que :
Access - faz conexão com o banco de dados Northwind.mdb
MSDE - faz conexão com o banco de dados Master
MySQL - faz conexão com o banco de dados Northwind importado do Access
FireBird - faz conexão com o banco de dados cadastro.gdb
Private Function GetConnection() As System.Data.IDbConnectionIf cboTipoBD.SelectedItem = "Access" Then Return New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb") ElseIf cboTipoBD.SelectedItem = "MSDE" Then Return New System.Data.SqlClient.SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Master;Data Source=MACORATI\VSDOTNET") ElseIf cboTipoBD.SelectedItem = "MySql" Then Return New MySql.Data.MySqlClient.MySqlConnection("server=localhost;user id=root;password=mac;database=northwind") ElseIf cboTipoBD.SelectedItem = "FireBird" Then Return New FirebirdSql.Data.Firebird.FbConnection("User=SYSDBA;Password=masterkey;Database=d:\teste\cadastro.gdb;DataSource=localhost;Port=3050;Dialect=3;") End If End Function |
Obs: MACORATI\VSDOTNET é o nome do meu servidor MSDE , altere para o nome usado na sua máquina local
2- GetDataAdapter(cn) - que irá receber a conexão e retornar um DataAdapter de acordo com o banco de dados selecionado
Access - usa a tabela Customers
MSDE - usa a tabela Clientes
MySQL - usa a tabela employees
FireBird - usa a tabela CLIENTES
Private Function GetDataAdapter(ByRef cn As System.Data.IDbConnection) As System.Data.IDbDataAdapter
If cboTipoBD.SelectedItem = "Access" Then sql = "select * from Customers" Return New System.Data.OleDb.OleDbDataAdapter(sql, cn) ElseIf cboTipoBD.SelectedItem = "MSDE" Then sql = "select * from Clientes" Return New System.Data.SqlClient.SqlDataAdapter(sql, cn) ElseIf cboTipoBD.SelectedItem = "MySql" Then sql = "SELECT * FROM northwind.employees" Return New MySql.Data.MySqlClient.MySqlDataAdapter(sql, cn) ElseIf cboTipoBD.SelectedItem = "FireBird" Then sql = "SELECT * FROM CLIENTES" Return New FirebirdSql.Data.Firebird.FbDataAdapter(sql, cn)
End
If |
Agora é só rodar a aplicação. Abaixo estou exibindo o resultado para os banco de dados MSDE e FireBird:
Acabamos de criar um super conector geral para banco de dados. Na verdade você pode melhorar a ideia implementando classes e fazendo um tratamento de erros mais consistente e colocando outros recursos e etc....
Pegue o código do projeto completo aqui: conexaoGenerica.zip
Veja os
Destaques e novidades do SUPER DVD Visual Basic 2013
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Aguarde mais artigos sobre VB.NET ...
Mat 8:24 E eis que se levantou no mar tão grande tempestade que o barco era coberto pelas ondas; ele, porém, estava dormindo.
Mat 8:25 Os discípulos, pois, aproximando-se, o despertaram, dizendo: Salva-nos, Senhor, que estamos perecendo.
Mat 8:26 Ele lhes respondeu: Por que temeis, homens de pouca fé? Então, levantando-se repreendeu os ventos e o mar, e seguiu-se grande bonança.
Mat 8:27 E aqueles homens se maravilharam, dizendo: Que homem é este, que até os ventos e o mar lhe obedecem? (Jesus)
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#