VB .NET - Acesso a dados genérico : SQL Server e MySQL

 Neste artigo vou recordar como podemos acessar um banco de dados de forma genérica usando a linguagem VB .NET.


Neste artigo vou mostrar realizar o acesso a dados genéri
co usando conceito de provider e de factory contidos na classe Data.Comon.DbProviderFactories.

O modelo de provedor esta baseado em um série de classes base no namespace System.Data.Comom. A classe DBProviderFactories permite a realização de dois tipos de tarefas:

  1. Obter uma lista de todos os provedores existentes via método estático GetFactoryClasses;
  2. 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 banco 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 e informe o nome Vbn_DBTexto e clique em OK;

Agora abra o formulário Form1.vb e inclua os seguintes controles no formulário:

Disponha os controles conforme o leiaute 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.

A seguir obtém os provedores registrados e cria uma conexão usando o provider apropriado para a seguir 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  

Eu sou a videira verdadeira, e meu Pai é o lavrador.
Toda a vara em mim, que não dá fruto, a tira; e limpa toda aquela que dá fruto, para que dê mais fruto.

João 15:1,2

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti