ASP NET - Módulo de Acesso ao MySQL

Importante

Cuidado com os componentes. Se sua aplicação for compilada num ambiente de 64 bits e você instalar um componente de 32 bits a sua aplicação fará tudo como se estivesse certo mas não conseguirá utilizar componentes de 32 bits em aplicação 64 bits e vice-versa.

A primeira vez que notei isso foi com as ferramentas do Office em uma app windows forms, e eu estava tentando utilizar os componentes do office ( que eram 32 bits ) e minha aplicação estava sendo compilada em 64 bits. Não funcionava e quebrei a cabeça até descobrir este problema. Foi só mudar a compilação de x86 para x64 que funcionou. Veja que no menu Teste, item 'Arquitetura do Processador para projetos AnyCPU' você pode testar sua app tanto em 32 bits (x86) como em 64 bits (x64).

Por default as dlls geradas pela app Visual Studio são 32 bits mas você pode alterar isso clicando no menu 'Depurar','Opções', 'Projetos e Soluções', 'Projetos web', 'Usar a versão de 64 bits do IIS Express para sites e projetos'.

O serviço SQL Server

O serviço de banco de dados sql é um conjunto de recursos que visa manter da maneira mais eficiente possível os dados armazenados no servidor atráves de recursos e algorítmos criados e estudados específicamente para essa tarefa.

Lógicamente se esse serviço busca eficiência ele não deve ser interrompido, por exemplo, por um serviço web executado no mesmo servidor. Para ser exato, quando os dois serviços rodam no mesmo servidor um serviço pára enquanto outro é processado e isso é muito ruim porque ninguém quer que o serviço web espere o serviço servidor sql nem o inverso.

Quando falamos que o serviço sql server é o responsável pela manutenção da base de dados falamos de tudo desde o banco de dados, segurança, acessos, etc.

Sempre que você emitir uma solicitação ao banco de dados enviará as 'credenciais de acesso' (normalmente servidor, banco de dados, schema, usuário, senha) e sempre o servidor sql verificará o que você pode ou não fazer através das políticas com que foi instruído a trabalhar com o usuário enviado. Se você informar ao servidor sql que o usuário x tem acesso a tabela y ele poderá acessá-la. Você pode permitir e bloquear em diversos níveis não só por tabelas, por exemplo, ele pode acessar a tabela mas não pode alterar sua estrutura, não/poderá executar comandos como Truncate, drop table e outras coisas. Até a nível de colunas das tabelas podemos configurar a segurança.

Portanto nunca você verá uma aplicação mexendo direto no banco de dados ( a não ser que você dê manutenção no serviço de banco de dados e ai terá o acesso e as ferramentas para fazer isso). O Acesso ao servidor SQL Server será sempre feito via sua aplicação que chama um componente de comunicação que chama um serviço de banco de dados.

A história e a evolução do Visual Studio e MySQL

O fabricante do Visual Studio é a Microsoft e a do MySQL é a Oracle e os dois não são muito cordiais entre sí.

Contudo a Microsoft melhorou sua visão de mercado e aderiu ao protocolo 'open source' e com isto ampliou muito o seu leque de produtos... E para isso teve que melhorar a integração entre as plataformas e ela mesmo acabou criando componentes de interface para produtos 'estrangeiros' como MySQL, Oracle, Postgre e o que vier pela frente.

Você deve saber que hoje temos um Microsoft SQL Server que roda NATIVAMENTE no ambiente Linux. Acho que sonhei uns 10 anos pelo menos com isso porque a gente sabia que o grande gancho para vender o windows nt server era o Microsoft SQL Server. Praticamente todas as vendas do Windows NT Server eram para instalação do Microsoft SQL Server.

O que você precisa saber sobre a integração Visual Studio e Microsoft SQL Server

Note que através do componente de comunicação do SQL Server será passado suas credenciais. Essas credenciais podem ser, no Microsoft SQL Server, integradas a um serviço de domínio ( como active directory ) ou um usuário e senha (autenticação tipica do sql) ou mesmo integrada ( aceita tanto a autenticação do windows quanto a do SQL).

Note que quando a autenticação é integrada com o windows ainda assim a segurança do SQL server define o que o usuário pode fazer.

Normalmente agrupamos os usuários em grupos e damos acesso específicos aos grupos aos recursos do banco de dados.

Dividir para Conquistar

Você já notou que há 3 personagens envolvidos numa aplicação web :
1-O browser do cliente.
2-O servidor web.
3-O servidor de banco de dados.

Por isso chama-se arquitetura cliente-servidor, ou three-tier

O terceiro item, servidor de banco de dados é facultativo mas presente na maioria dos sites da Internet porque tudo na Internet costuma ser grande e demandaria muito do servidor web o serviço de banco de dados.

Sempre que você for utilizar um banco de dados SQL local ou na nuvem utilizará um componente de acesso, normalmente, o ADO. Infelizemente os ADOs para MySQL, Oracle, Postgre são exclusivos e únicos para a sua plataforma, ou seja, só servem para a sua plataforma. Sendo assim se você acessa n tipos de bancos de dados deverá instalar n tipos de ADOs.

É importante frisar que a segurança de autenticação do usuário e autorização do que o usuário pode fazer ou não estão no servidor sql. O cliente apenas envia as credenciais e o sql define seu acesso, se é permitido ou não.

Procedimentos para instalação dos componentes necessários

Como dito acima é necessário instalar um componente de acesso ao MySQL. Mesmo se você tenha o banco de dados MySQL instalado na sua máquina esse componente NÃO é instalado por default pelo banco de dados. Se você pensar bem não faz sentido instalar as ferramentas de manutenção de banco de dados, que pertencem ao lado do servidor, juntamente com as ferramentas do lado do cliente.

Baixando o componente de comunicação com o banco de dados MySQL e Instalando

Defina o objeto que você deseja baixar, de 32 bits ou 64 bits. Aí você vai na Internet e procure por ele tipo : mysql ado.net connector 64 bit

Eu encontrei, usei e testei este do site : Clique aqui

Hoje é 15/03/2021 e o componente que baixei e instalei foi o MySQL Connector Net 8.0.23

Baixei e instalei o componente. Ele foi instalado na pasta : C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.23\Assemblies\v4.5.2 mas poderá variar de acordo com a versão.

Preparativos para a decolagem

Inicie o serviço MySQL e tenha certeza que ele está funcionando perfeitamente.

Anote o servidor, porta, banco de dados (bd), usuario e senha. Você vai precisar delas no sua app ASP NET.

Botando a mão na massa - Utilizando o mySQL em nosso projeto ASP NET

Crie sua aplicação asp net ou abra a aplicação que você deseja fazer o acesso ao MySQL.

Vou fazer a coisa mais invertida que o normal mas didaticamente fica melhor.

Adicionando o módulo de acesso ao MySQL

Tenho pronta as funcionalidades de acesso ao MySQL. Elas são um padrão muito bom para se trabalhar mas se você tem as suas no final do projeto, quando a coisa funcionar, mude as funções exemplos pelas suas e verifique se continuam funcionando.

Clique no menu 'Projeto' e selecione o item 'Adicionar Classe' e em seguida selecione 'Módulo'. Dê um nome estiloso pra ele do tipo ModuloMySQL.

Copie e cole os itens abaixo dentro do Módulo :

    Public dbconn As MySqlConnection 'string de conexão
    Public dbCMD As MySqlCommand 'controle que executa o comando
    Public dtrMySQL As MySqlDataReader 'interface entre a dll do mysql e o Data do Visual Studio

    ''' <summary>
    ''' Define o string de conexão com o Banco de dados MySQL
    ''' Pode ser local ou na nuvem
    ''' </summary>
    Public Sub DefStrConexao()
        Dim servidor As String = "servidor"
        Dim porta As String = "3306"
        Dim bd As String = "BancoDeDados"
        Dim usuario As String = "usuario"
        Dim senha As String = "senha"
        System.Web.HttpContext.Current.Session("strCon") = "Server=" + servidor + ";Port=" + porta + ";Database=" + bd + ";Uid=" + usuario + ";Pwd=" + senha + ";"
    End Sub

    ''' <summary>
    ''' Executa uma querie e retorna um data adapter
    ''' Portanto NÃO utilizar com gridview
    ''' </summary>
    ''' <param name="Query"></param>
    ''' <returns></returns>

    Public Function BDDA(ByVal Query As String) As MySqlDataAdapter
        Try
            Dim stringConexao As String = System.Web.HttpContext.Current.Session("strCon")
            Dim conexao As MySqlConnection = New MySqlConnection(stringConexao)
            'conexao.Open()

            Dim da As MySqlDataAdapter = New MySqlDataAdapter()
            da.SelectCommand = New MySqlCommand(Query, conexao)
            Dim ds As DataSet = New DataSet() 'Criando objeto DataSet para trabalhar com os dados
            da.Fill(ds) 'Preencher objeto Dataset
            ds.Dispose() 'Encerramento dos Objetos
            'da.Dispose() 'Encerramento dos Objetos
            conexao.Close()
            conexao.Dispose()
            Return da

        Catch ex As Exception
            Throw New Exception("Falha BDDA\\n" + System.Web.HttpContext.Current.Session("strCon") + "\\n" + ex.Message)
        End Try

    End Function
    ''' <summary>
    ''' Executa uma querie e retorna um data set
    ''' Portanto utilizar com gridview
    ''' </summary>
    ''' <param name="Query"></param>
    ''' <returns></returns>
    Public Function BDDS(ByVal Query As String) As DataSet
        Try
            Dim stringConexao As String = System.Web.HttpContext.Current.Session("strCon")
            Dim conexao As MySqlConnection = New MySqlConnection(stringConexao)
            'conexao.Open()

            Dim da As MySqlDataAdapter = New MySqlDataAdapter()
            da.SelectCommand = New MySqlCommand(Query, conexao)
            Dim ds As DataSet = New DataSet() 'Criando objeto DataSet para trabalhar com os dados
            da.Fill(ds) 'Preencher objeto Dataset
            'ds.Dispose() 'Encerramento dos Objetos
            da.Dispose() 'Encerramento dos Objetos
            conexao.Close()
            conexao.Dispose()
            Return ds
        Catch ex As Exception
            Throw New Exception("Falha BDDS\\n" + System.Web.HttpContext.Current.Session("strCon") + "\\n" + ex.Message)
        End Try

    End Function

    ''' <summary>
    ''' executa uma querie no bd sem retornar nada ( como delete, truncate... )
    ''' </summary>
    ''' <param name="Query"></param>
    Public Sub BDExecQuery(ByVal Query As String)
        Try
            Dim Com As New MySqlConnection(System.Web.HttpContext.Current.Session("strCon"))
            Com.Open()
            Dim Cmd As New MySqlCommand(Query, Com)
            Cmd.ExecuteNonQuery()
            Cmd = Nothing
            Com = Nothing
        Catch ex As Exception
            Throw New Exception("Falha BDExecQuery\\n" + System.Web.HttpContext.Current.Session("strCon") + "\\n" + ex.Message)
        End Try
    End Sub

    ''' <summary>
    ''' Executa uma querie e retorna um data reader
    ''' </summary>
    ''' <param name="Query"></param>
    ''' <returns></returns>
    Public Function BDDR(ByVal Query As String) As MySqlDataReader
        Try
            dbconn = New MySqlConnection(System.Web.HttpContext.Current.Session("strCon"))
            dbconn.Open()
            dbCMD = New MySqlCommand(Query, dbconn)
            Dim dr As MySqlDataReader
            dr = dbCMD.ExecuteReader()
            Return dr
        Catch ex As Exception
            Throw New Exception("Falha BDDR\\n" + System.Web.HttpContext.Current.Session("strCon") + "\\n" + ex.Message)
        End Try
    End Function

Término da cópia. Não colar este item.

Feito isto tudo que é mysql esta hachurado indicando que o mysql não está definido.

Fazendo a referência ao objeto MySQL

Clique em 'Projeto', 'Adicionar Referência'. Em seguida selecione a aba 'Procurar'.

Quando você instalou o componente ADO ele foi colocado numa pasta.
No meu computador foi : C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.23\Assemblies\v4.5.2

Vá até a pasta onde o componente ADO do MySQL foi instalado e clique em 'MySQL.Data.dll' e a seguir no botão 'Adicinar'. Clique no botão OK

Até aqui parece que nada mudou. Na primeira linha do módulo coloque :

Imports MySql.Data.MySqlClient

Neste momento todos os hachurados devem ter sumido.

Personalizando para sua app:
 • 1 - Altere os valores dos campos servidor, porta , bd(banco de dados), usuario e senha para o seu usuário de acesso ao MySQL.
 • 2 - A porta de acesso ao MySQL default é a 3306 mas se for outra altere o valor da variável porta.




Utilizando o acesso ao MySQL

Você definiu até aqui o que é necessário para acessar o servidor MySQL mas não tem nada usando este recurso.

Vamos criar uma página web para testes. Crie uma nova. Clique no menu 'Projeto', 'Adicionar novo item', selecione 'web' e 'Formulário da Web'. Dê um nome a sua nova página e clique no botão 'Adicionar'

Acrescente dentro da Div principal do body o seguinte código :

            <asp:DataList id="Pessoas"
                runat="server"
                gridlines ="Both"
                RepeatColumns="4"
                RepeatDirection="Horizontal"
                CellPadding="3"
                CellSpacing="0"
                Font-Name="Arial"
                Font-Size="8pt">


                <ItemTemplate>
                  <%# DataBinder.Eval(Container.DataItem, "ID") %><br />
                  <%# DataBinder.Eval(Container.DataItem, "nome") %><br />
                  <%# DataBinder.Eval(Container.DataItem, "dtNasc") %><br />
                </ItemTemplate>

                <HeaderTemplate>
                  Clientes
                </HeaderTemplate>

                <FooterTemplate>
                  Ano fiscal de 2020
                </FooterTemplate>


            </asp:DataList>

O código acima define o componente que exibirá os dados mas não há nada que esteja enviando os dados para o componente e, se você abrir a página agora, verá um grande branco.

Personalizando para sua app:
 • 1 - No parâmetro RepeatColumns defino o valor 4 o que faz com que seja exibido 4 registros em cada linha do controle.
 • 2 - No parâmetro RepeatDirection defini horizontal porque desejo que as repetições de coluna sejam na horizontal.
 • 3 - Na tag asp:DataList id="Pessoas" eu estou exibindo dados de pessoas, por isso dei esse nome ao controle.
 • 4 - A tag DataBinder.Eval(Container.DataItem,xxx) é o que traz o dado do MySQL para o controle.
         Portanto troque ID, nome, dtNasc pelo nome de colunas da sua tabela.
 • 5 - Na tag HeaderTemplate está o texto que será exibido no topo do controle.
 • 4 - Na tag FooterTemplate está o texto que será exibido no rodapé do controle.




Colocando os dados do MySQL no controle

Vá no código vb da página e coloque o código abaixo num ponto onde seu programa passe por ele. Eu coloquei o meu no load do form. Cole o código abaixo dentro da função.

        Dim sql As String = ""
        Dim ds As DataSet

        DefStrConexao() 'definindo o string de conexão
        sql = "select * from pessoas limit 50"
        ds = BDDS(sql)

        Pessoas.DataSource = ds
        Pessoas.DataBind()

Rode a aplicação e você verá os dados do MySQL em sua página.

Personalizando para sua app:
 • Personalize a querie colocada na variável sql para seu site.




Como ficou a exibição dos dados

Como o intuito é fazer o controle funcionar da maneira mais simples possível o visual ficou simplório mas funcional




Funcionalidades de acesso ao MySQL

No módulo de acesso ao MySQL temos as funcionalidades :
DefStrConexao que define o string de conexão com o servidor MySQL
 • a BDDA que executa uma querie e retorna um Data Adapter
 • a BDDS que executa um SQL e retorna um Data Set
 • a função BDExecutaQuery que executa uma querie que não retorna dados (tipo delete, truncate table)
 • a BDDR que executa uma querie e retorna um Data Reader

Dependendo do tipo de controle que você está trabalhando vai precisar de um tipo de dados e as funções acima fornecem os dados para todas as ocasiões.