Neste artigo vou recordar como podemos acessar um banco de dados de forma genérica usando a linguagem VB .NET.
O modelo de provedor está baseado em uma série de classes base no namespace System.Data.Comom. A classe DBProviderFactories permite a realização de dois tipos de tarefas:
- Obter uma lista de todos os provedores existentes via método estático GetFactoryClasses
- Criar uma instância de um determinado Factory conforme o seu tipo via método GetFactoryClass
Eles retornam um tipo de classe abstrata do tipo DBConnection. As classes de provider factory são derivadas de uma classe base abstrata: System.Data.Common.DbProviderFactory, e para cada tipo de base de dados a ser acessado, temos uma nova classe derivada desta classe base abstrata.
Desde que o DbProviderFactory apropriado foi criado, a função na tabela acima pode ser usada para criar o objeto apropriado ao invés de usar o operador New como anteriormente. (Para determinar todas as classes DbProviderFactory disponíveis e criar suas classes adicionais, é fornecido a classe System.Data.Common.DbProviderFactories).
Cada provedor de dados faz o registro de uma classe ProviderFactory no arquivo machine.config da plataforma .NET.
A classe base DbProviderFactory e a classe ProviderFactories podem retornar um DataTable de informações sobre os diferentes provedores registrados no arquivo machine.config e podem recuperar a ProviderFactory conforme a sequência do provedor fornecida ou um DataRow de um DataTable.
Neste artigo vou mostrar como realizar as duas tarefas: obter a lista dos provedores e acessar os bancos de dados SQL Server e o MySQL.
Para acessar cada banco de dados, precisamos definir as seguintes configurações:
1- SQL Server
- string de conexão – “Data Source=MACORATTI;Initial Catalog=Northwind;Integrated Security=True”
- nome do provedor – “System.Data.SqlClient”
- string sql de consulta para acesso a tabela – “Select * from Customers”
2- MySQL
- string de conexão – “server=localhost;user id=root;password=??????;database=cadastro”
- nome do provedor – “MySql.Data.MySqlClient”
- string sql de consulta para acesso a tabela – “Select * from alunos”
Estou fazendo o acesso local, e por esse motivo preciso ter instalado os dois bancos de dados.
Recursos usados
Criando o projeto no VS Community 2017
Abra no VS community 2017 e no menu File clique em New Project;
A seguir, selecione o template Visual Basic -> Windows -> Windows Forms Application, informe o nome Vbn_DBTexto e clique em OK;
Agora abra o formulário Form1.vb e inclua os seguintes controles no formulário:
- 2 Buttons – btnAcessarBD e btnExibirProvedores
- 2 RadioButtons – rdbSQLServer e rdbMySQL
- 1 ListBox – lbProvedores
- 1 DataGridView – dgvDados
Disponha os controles conforme o layout da figura abaixo:

Definindo o código do formulário
Namespaces usados no formulário:
Imports System.Data.Common
Variáveis definidas no início do formulário:
Dim conexaoBD As String = “”
Dim provider As String = “”
Dim consultaSQL As String = “”
1- Código do botão de comando para exibir os provedores existentes
No evento btnExibirProvedores_Click, inclua o código que vai permitir exibir os provedores que você tem registrado na sua máquina local:
Private Sub btnExibirProvedores_Click(sender As Object, e As EventArgs) Handles btnExibirProvedores.Click
Dim factory As DbProviderFactory = Nothing
Dim dtFactories As DataTable = DbProviderFactories.GetFactoryClasses()
Dim vetor As ArrayList = New ArrayList
Dim i As Integer = 0
For Each drFactory As DataRow In dtFactories.Rows
Try
factory = DbProviderFactories.GetFactory(drFactory)
vetor.Add(factory)
lbProvedores.Items.Add(vetor(i))
i = i + 1
Catch ex As Exception
factory = Nothing
End Try
Next
End Sub
O código acima usa o método estático DbProviderFactories.GetFactoryClasses() para retornar um DataTable contendo os provedores registrados.
2- Código do botão para acessar o SQL Server e o MySQL de forma genérica
Este código verifica qual radiobutton foi selecionado para definir o provedor, a string de conexão e a consulta SQL usada.
Em seguida obtém os provedores registrados e cria uma conexão usando o provider apropriado para a seguir e criar um comando definir a consulta, abrir a conexão e ler os dados do banco de dados exibindo-os no DataGridView:
Private Sub btnAcessarBD_Click(sender As Object, e As EventArgs) Handles btnAcessarBD.Click
If rdbSQLServer.Checked Then
provider = "System.Data.SqlClient"
conexaoBD = "Data Source=MACORATTI;Initial Catalog=Northwind;Integrated Security=True"
consultaSQL = "Select * from Customers"
ElseIf rdbMySQL.Checked Then
provider = "MySql.Data.MySqlClient"
conexaoBD = "server=localhost;user id=root;password=gpxpst;database=cadastro"
consultaSQL = "Select * from alunos"
End If
Dim factory As DbProviderFactory = DbProviderFactories.GetFactory(provider)
Dim cnn As DbConnection = factory.CreateConnection
cnn.ConnectionString = conexaoBD
Dim cmd As DbCommand = factory.CreateCommand
cmd.Connection = cnn
cmd.CommandText = consultaSQL
cmd.CommandType = CommandType.Text
cnn.Open()
Dim reader As DbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)
Dim info As DataTable = New DataTable
info.Load(reader)
reader.Close()
dgvDados.DataSource = info
End Sub
Executando o projeto teremos o resultado a seguir:

Pegue o projeto completo aqui: Vbn_DBTexto.zip.




