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.