VB 2005 - Acessando o MySQL 5.0 via código.


Já escrevi diversos artigos sobre como acessar o banco de dados MySQL desde os tempos do Visual Basic, mas creio que este é o primeiro usando o VB 2005. Não há muitas alterações mas é bom mostrar como se faz.

Veja os meus artigos sobre o assunto :

- MySQL - Vinculando , Importando e Exportando tabelas do Access
-
Visual Basic - Acessando MySQL com ADO usando um Driver ODBC
-
Visual Basic - Acessando MySQL com ADO
-
VB  e  MySQL -  Gerenciando dados
-
MySQL - Distribuindo o MySQL com sua aplicação
-
MySQL - Operações básicas com SQL

Como o objetivo não é mostrar como instalar o MySQL 5.0 nem como criar banco de dados e tabelas no MySQL eu vou pular esta parte mas você pode ler o meu artigo sobre o assunto:   ASP.NET - Acesso ao MySQL  

Você vai precisar dos seguintes recursos:

Após instalar o MySQL 5.0  verifique se o mesmo esta ativo como um serviço no painel de controle do Windows, opção desempenho e manutenção -> ferramentas administrativas -> Serviços .Você deverá o serviço MySQL (este é o nome padrão) com status Iniciado.

A seguir usando as ferramentas MySQL Administrator eu criei o banco de dados Cadastro e em seguida a tabela Clientes com a estrutura abaixo:

Usando o MySQL Query Browser , através de instruções SQL Insert Into , inclui alguns dados na tabela Clientes conforme figura a seguir:

Agora vamos criar um novo projeto no Visual Basic 2005 Express Edition do tipo Windows Application com o nome mySQL_Net.

Vamos incluir no projeto uma referência ao conector do MySQL para a plataforma .NET. Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add Reference. Em seguida abra a guia Browse e localize a pasta onde o Connector foi instalado selecionado a dll do provedor conforme a figura a seguir;

Agora já podemos usar as classes para acesso a dados do MySQL. Vamos incluir uma classe no projeto com o nome DBConnection.vb

A seguir vamos definir alguns métodos e propriedades na classe conforme o código abaixo:

Imports MySql.Data.MySqlClient


Public
Class DBConnection


Dim
mSqlTransacao As
MySqlTransaction

Dim mSqlConexao As MySqlConnection

Dim mSqlServerHost As String = String.Empty

Dim cmd As MySqlCommand = New MySqlCommand()

Dim mSqlDataBase As String = ""

Dim mSqlLogin As String = ""

Dim mSqlSenha As String = ""


Public
Property Login() As
String

Get

   Return mSqlLogin

End Get

Set(ByVal value As String)

mSqlLogin = value

End Set

End Property

 

Public Property Senha() As String

Get

Return mSqlSenha

End Get

Set(ByVal value As String)

mSqlSenha = value

End Set

End Property

Public Property DataBase() As String

Get

Return mSqlDataBase

End Get

Set(ByVal value As String)

mSqlDataBase = value

End Set

End Property

Public Property HostName() As String

Get

Return mSqlServerHost

End Get

Set(ByVal value As String)

mSqlServerHost = value

End Set

End Property

Public Sub New()

  mSqlConexao = New MySqlConnection()

  Me.HostName = My.Settings.host

   Me.DataBase = My.Settings.database

   Me.Login = My.Settings.login

   Me.Senha = My.Settings.pwd

End Sub

Public Sub OpenConnection()


   Dim
strConnString As String = "Data Source=" + Me.HostName + ";user id=" + Me.Login + ";password=" + Me.Senha + "; database=" + Me
.DataBase


   If
mSqlConexao Is Nothing Or mSqlConexao.State = ConnectionState.Broken Or mSqlConexao.State = ConnectionState.Closed
Then

      mSqlConexao = New MySqlConnection()

      mSqlConexao.ConnectionString = strConnString

      mSqlConexao.Open()

End If

End Sub

Public Sub CloseConnection()

    If mSqlConexao.State = ConnectionState.Open Then

       mSqlConexao.Close()

       mSqlConexao.Dispose()

       mSqlConexao = Nothing

   End If

End Sub

Public Function ExecuteDS(ByVal sql As String) As DataSet
 

Dim ds As New DataSet

Dim da As MySqlDataAdapter = New MySqlDataAdapter()


Try

  Me.OpenConnection()

  cmd.CommandType = CommandType.Text

  cmd.CommandText = sql

  cmd.Connection = mSqlConexao

   da.SelectCommand = cmd

   da.Fill(ds)

  da.Dispose()

   Return ds

Catch ex As Exception

  MsgBox(ex.Message)

End Try
 

Return ds

End Function

 

Public Function ExecuteDR(ByVal sql As String) As MySqlDataReader

Dim dr As MySqlDataReader = Nothing


Try

  Me.OpenConnection()

  cmd.CommandType = CommandType.Text

  cmd.CommandText = sql

  cmd.Connection = mSqlConexao

  dr = cmd.ExecuteReader

  cmd.Dispose()

  Return dr

Catch ex As Exception

  MsgBox(ex.Message)

End Try

Return dr

End Function


End
Class

Nesta classe temos:

As seguintes propriedades:

Para o nosso caso iremos definir estas propriedades no arquivo app.Config conforme abaixo:

Dica: Você pode guardar a senha cifrada e decifrar na propriedade Senha. Veja uma função abaixo que você pode usar para este fim:

A função geraHash() pode ser usada para gerar um hash de um texto , no caso a senha;

Imports System.Security.Cryptography

Imports System.text
 

Public Class Protege


Public
Shared Function GeraHash(ByVal texto As String) As
String


'Cria um objeto enconding para assegurar o padrão

'de encondig para o texto origem

Dim Ue As New UnicodeEncoding()

'Retorna um byte array baseado no texto origem

Dim ByteSourceText() As Byte = Ue.GetBytes(texto)

'Instancia um objeto MD5

Dim Md5 As New MD5CryptoServiceProvider()

'Calcula o valor do hash para o texto origem

Dim ByteHash() As Byte = Md5.ComputeHash(ByteSourceText)

'Converte o valor obtido para o formato string

Return Convert.ToBase64String(ByteHash)

End Function


End
Class

 

Como a função é estática (Shared) não precisamos criar uma instância da classe para usá-la. Por isso no código usamos diretamente:  Protege.GeraHash(txtSenha.Text.Trim)

Os valores serão recuperados no construtor definido na classe.(Sub New)

A classe possui os seguintes métodos:

Para mostrar como usar a classe vamos preencher um DataGridView usando um DataSet e um ListBox usando um DataReader via MySQL.

Para isso inclua no formulário os controles SplitContainer, um DataGridView, um ListBox e dois botões de comando conforme a figura abaixo:

Agora no evento Click do botão - MySQL DataSet inclua o seguinte código:

Private Sub btnDS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDS.Click

Dim accDb As New DBConnection

Dim ds As DataSet = Nothing

Dim sql As String = "Select * from Clientes"

ds = accDb.ExecuteDS(sql)

DataGridView1.DataSource = ds.Tables(0).DefaultView

End Sub

Este cria uma instância da nossa classe DBConnection e usa o método ExecuteDS obtendo um dataset com todo os registros da tabela Clientes. Em seguida os registros são exibidos no DataGridView.

Agora no evento Click do botão - MySQL DataReader inclua o seguinte código:

Private Sub btnDR_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDR.Click


Dim
accDb As New DBConnection

Dim dr As MySqlDataReader = Nothing

Dim sql As String = "Select * from Clientes"


dr = accDb.ExecuteDR(sql)

 

Try

    While dr.Read()

        ListBox1.Items.Add(dr(0).ToString() & vbTab & dr(1).ToString & vbTab & dr(2).ToString)

    End While

    dr.Close()

Catch ex As Exception

    MsgBox(ex.Message)

End Try

 

End Sub

Este cria uma instância da nossa classe DBConnection e usa o método ExecuteDR obtendo um datareader com todo os registros da tabela Clientes. Em seguida os registros são exibidos no ListBox.

Veja o resultado obtido na figura a seguir:

A classe pode ser considerada a camada de dados que criamos para acessar o MySQL. Note que o código do formulário ficou bem enxuto.

Tanto no formulário como na classe você deverá declarar o seguinte comando:  Imports MySql.Data.MySqlClient

Pegue o projeto completo aqui:   mySQL_NET.zip

Como você viu não tem segredo acessar o MySQL usando o VB 2005 Express. Você pode melhorar a nossa classe, principalmente no tratamento de exceções.

Até o próximo artigo .NET ...


José Carlos Macoratti