André Alves de Lima

Talking about Software Development and more…

Utilizando o provider ADO.NET do MySQL no C#

É impressionante a quantidade de pessoas que utilizam o MySQL como banco de dados. Fico mais impressionado ainda quando desenvolvedores .NET optam por utilizar o MySQL Community ao invés do SQL Server Express em suas aplicações, uma vez que o SQL Server tem suporte nativo no .NET Framework, funciona sem termos que instalar drivers ou conectores adicionais, etc. Mas, de qualquer forma, não podemos negar a realidade. Atualmente o MySQL é o segundo banco de dados mais utilizado no mundo! Portanto, não é à toa que tanta gente utiliza o MySQL em suas aplicações. No artigo de hoje aprenderemos a utilizar o provider ADO.NET do MySQL no C# (também chamado de Connector).

Instalando o MySQL

Tenho que admitir que a experiência de instalação do MySQL evoluiu muito desde a última vez que trabalhei com ele (lá por volta de 2007). Antigamente, você tinha que baixar cada “peça” do MySQL separadamente (mecanismo do banco de dados, ferramenta de administração, providers / conectores, etc). Quando cheguei hoje na página de downloads do MySQL, achei que nada tinha mudado. Porém, depois de navegar um pouco pelas opções, acabei encontrando o download do MySQL Installer, que contém tudo o que você precisa em um só download.

Durante o setup, você é apresentado com a opção de instalar o modo “developer”, que já contém o banco de dados, ferramentas de administração, conectores para as mais diversas plataformas, etc. Porém, como essa opção instala conectores para plataformas que eu não utilizo (Java, por exemplo), resolvi fazer a instalação customizada e escolher somente o que eu queria instalar:

– MySQL Server
– MySQL Workbench (ferramenta de administração)
– MySQL for Visual Studio
– Connector/NET

A instalação e configuração inicial é muito simples. Basicamente o processo é naquele estilo “next, next, finish“.

Após a instalação e configuração inicial, o MySQL Workbench é automaticamente executado.

Ferramenta de administração

O MySQL Workbench é a ferramenta de administração do MySQL. A Oracle deu uma boa reformulada na ferramenta e agora ela está bem simples e intuitiva:

Para fins de exemplo neste artigo, eu criei somente um novo banco de dados (demodb) com uma nova tabela (demotbl). Caso você precise de ajuda na utilização do MySQL Workbench, garanto que você encontrará diversos tutoriais na Internet, como este aqui e o manual de referência oficial.

OleDb não é suportado

Agora que já aprendemos sobre a instalação e ferramenta de administração do MySQL, vamos partir para o código .NET? Eu sempre achei que era possível acessar bancos de dados MySQL através de uma conexão OleDb (OleDbConnection, OleDbCommand, etc), portanto, eu tentei desenvolver o seguinte código:

            using (var connection = new System.Data.OleDb.OleDbConnection("Provider=MySQLProv;Data Source=localhost;User Id=root;Password=dbserver;"))
            {
                connection.Open();
                using (var command = new System.Data.OleDb.OleDbCommand("INSERT INTO demodb.demotbl (description) VALUES (?)", connection))
                {
                    command.Parameters.AddWithValue("@description", DateTime.Now.ToString("F"));
                    command.ExecuteNonQuery();
                }
            }

Mas, eu estava enganado. Veja o erro que recebemos ao tentarmos executar o código acima:

The ‘MySQLProv’ provider is not registered on the local machine.

Não é possível utilizar OleDb com o MySQL, ou seja, nós somos obrigados a utilizar o MySQL Connector para o .NET.

Utilizando o MySQL Connector para o .NET

O MySQL Connector para o .NET é muito simples de ser utilizado. Primeiramente, temos que adicionar uma referência ao assembly “MySQL.Data“, que fica dentro da categoria “Extensions” na janela de referências:

Feito isso, temos acesso às classes de acesso a dados do MySQL dentro do namespace MySql.Data.MySqlClient. As classes mais importantes são MySqlConnection e MySqlCommand. A utilização dessas classes é idêntica à utilização das outras classes de acesso a dados do ADO.NET (como SqlConnection, OleDbConnection, etc). Veja como ficaria o código para inserir um registro novo na tabela “demotbl“:

            using (var connection = new MySql.Data.MySqlClient.MySqlConnection("Server=localhost;Database=demodb;Uid=root;Pwd=dbserver;"))
            {
                connection.Open();
                using (var command = new MySql.Data.MySqlClient.MySqlCommand("INSERT INTO demotbl (description) VALUES (@description)", connection))
                {
                    command.Parameters.AddWithValue("@description", DateTime.Now.ToString("F"));
                    command.ExecuteNonQuery();
                }
            }

Concluindo

A utilização das classes de acesso a dados do MySQL é muito parecida com o acesso a dados para outros bancos de dados (como SQL Server). Uma vez que instalamos o “Connector“, conseguimos adicionar a referência ao assembly necessário, aí é só começar a utilizar!

Para ficar por dentro das novidades do meu site, convido você a assinar a minha newsletter. Ao fazer isso, você receberá uma vez por semana um e-mail sobre o artigo publicado, ficará sabendo em primeira mão sobre o próximo artigo e, além disso, receberá dicas “bônus” que eu só compartilho por e-mail! Assine através deste link ou utilizando o formulário logo abaixo.

Até a próxima!

André Lima

Newsletter do André Lima

* indicates required



Powered by MailChimp

17 thoughts on “Utilizando o provider ADO.NET do MySQL no C#

  • Luiz Antonio Duarte Estevam Franco disse:

    Olá Andre Lima bom dia e mais um excelente post…e aproveitando este post com o post sobre SETUP, DEPLOY E INSTALAÇÃO com o INSTALL SHIELD PREMIER 10 quais seriam os pré-requisitos e configurações de instalação via install Shield para instalar o MYSQL em modo silent para reconhecer uma base de dados de uma aplicação windows forms em .NET no computador do cliente. e o recurso de backup seria o mesmo do outro post que você colocou com o SqlServer?

    Fico no aguardo e desde já agradeço

  • Marcelo França disse:

    Bom dia!
    André parabéns pela postagem. Trabalho com Mysql já algum tempo na linguagem vb.net e utilizo a pouco tempo a biblioteca de backup, essa funcionalidade faz backup e restore do banco inteiro. Será que existe algum parâmetro no backup para não fazer cópia de algumas tabelas?

    Abraço
    Marcelo França – Rio de Janeiro

    • andrealveslima disse:

      Olá Marcelo, obrigado pelo comentário!

      Qual biblioteca exatamente você está utilizando para fazer o backup e restore do MySQL pelo C#? Se for a biblioteca MySQLBackup.NET, segue um exemplo na própria página da biblioteca que mostra como fazer o backup somente de uma tabela específica:

      https://mysqlbackupnet.codeplex.com/discussions/642041

      Abraço!
      André Lima

      • Marcelo França disse:

        Opa André, obrigado ! Acho que era isso mesmo que estava procurando.

        Forte abraço
        Marcelo do Rio de Janeiro.

      • celso jr disse:

        Olá, André … ótima matéria. Gostaria de saber como posso usar esse connector para o smart device com c#. Pode me ajudar. Grato.

        • andrealveslima disse:

          Olá Celso, obrigado pelo comentário!

          Você poderia explicar melhor o que você está querendo fazer? Que smart device? Você está trabalhando com um projeto Xamarin? Dê mais detalhes para que eu consiga te ajudar melhor..

          Abraço!
          André Lima

  • Frederico Alves Simões disse:

    Olá André!

    Muito boa a nova dica postada. Queria mais uma vez agradecer pelo conteúdo didático. Só estou passando mesmo para agradecer pelo gesto de compartilhar conhecimento.

  • Ezequiel da silva daniel disse:

    Olá André, valeu pela dica. Eu já trabalhei com o mysql e usei o EF6 e numa aplicação com servidor local ou numa rede funcionou como usasse nativo o MS SQL, porém tentei direcionar a aplicação para um banco numa hospedagem o EF CF não funciona, não entendi se era pelo motivo do mysql não ser o último, mas de duas versões anterior do último reles ou devido algum bloqueio.

    • andrealveslima disse:

      Olá Ezequiel!

      Difícil saber qual era o problema.. Esses ambientes de hospedagem são complicados.. Cheios de restrição por rodarem mais de um site de diferentes clientes no mesmo servidor.. Como você mesmo falou, pode realmente ser algum problema de permissão ou alguma incompatibilidade com a versão antiga do MySQL.. O que aconteceu quando você tentou rodar nesse servidor de hospedagem? Recebeu algum erro específico ou simplesmente não funcionou nada?

      Abraço!
      André Lima

      • Ezequiel da silva daniel disse:

        O erro era de timout de conexão. Mais ai deixei de lado e partir usar o Azure, seria interessante se funcionasse pelo custo, mas acredito que agora já deve funcionar, pois já faz mais de um ano.. :)

  • […] o mesmo padrão de execução de comandos ADO.NET com outros bancos de dados (SQL Server, Access, MySQL, SQLite, […]

  • Paulo disse:

    Muito bom, simples e objetivo. É o que falta na maioria das pessoas que postam artigos na Internet, inclusive até mesmo entre fabricantes dos produtos.

    • andrealveslima disse:

      Olá Paulo, muito obrigado pelo comentário!

      Fico feliz que você tenha gostado e acho sensacional que você achou o artigo simples e objetivo.. É justamente essa simplicidade que eu tento manter em todos os artigos que eu escrevo.. Tem muito material por aí que, ou não funciona, ou é muito difícil de entender..

      Se tiver sugestões de temas para outros artigos é só falar..

      Um grande abraço!
      André Lima

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *