19 08 2015
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
Backup e restauração de bancos de dados SQL Server pelo C# Calculando a distância entre dois pontos utilizando Google Maps e C#
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
Olá Luiz, obrigado pelo comentário!
Quanto à instalação do MySQL de forma silenciosa, você encontra as linhas de comando neste link:
https://dev.mysql.com/doc/refman/5.5/en/windows-installer-msi-quiet.html
Já a questão do backup e restore, aquele artigo só funciona para o SQL Server, uma vez que ele utiliza as classes específicas do SQL Server Management Objects.. O backup e restore do MySQL é feito de maneira diferente.. Tem uma biblioteca que facilita essa operação caso você tenha interesse:
https://mysqlbackupnet.codeplex.com/
Abraço!
André Lima
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
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
Opa André, obrigado ! Acho que era isso mesmo que estava procurando.
Forte abraço
Marcelo do Rio de Janeiro.
Olá Marcelo! Legal.. Fico feliz que tenha dado certo.. Qualquer coisa entre em contato!
Abraço!
André Lima
Olá, André … ótima matéria. Gostaria de saber como posso usar esse connector para o smart device com c#. Pode me ajudar. Grato.
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
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.
Olá Frederico, muito obrigado pelo comentário! Fico feliz que tenha gostado do conteúdo!
Grande abraço!
André Lima
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.
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
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.. :)
Legal Ezequiel.. Realmente com o Azure fica mais fácil.. :)
Abraço!
André Lima
[…] o mesmo padrão de execução de comandos ADO.NET com outros bancos de dados (SQL Server, Access, MySQL, SQLite, […]
Muito bom, simples e objetivo. É o que falta na maioria das pessoas que postam artigos na Internet, inclusive até mesmo entre fabricantes dos produtos.
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