Tutorial C# – Inserção de dados em MySQL
Na sequência de tutoriais anteriores, em que demonstrei como efectuar ligações entre o C# e bases de dados, hoje irei mostrar como inserir dados numa base de dados MySQL. Apesar de a ligação C# - MySQL não ser a mais utilizada, visto o C# ser uma linguagem mais orientada para o ambiente Windows, e o MySQL orientado para a Web, irão poder verificar que não existe nenhum “segredo”, e é até bastante simples a inserção de dados.
Antes de começar a ler este tutorial, é muito importante que tenha compreendido o anterior tutorial relacionado com este tema (Tutorial C# - Ligação a Base de Dados MySQL), visto que os primeiros passos são iguais.
Primeiro criamos uma base de dados no phpMyAdmin. Neste caso criei a base de dados com o nome pplware_bd.
Esta base de dados, terá uma tabela com o nome tabela_dados, com três campos:
- id (INT (5), AUTO_INCREMENT, Chave Primária)
- titulo (VARCHAR(25))
- descricao (VARCHAR(100))
Para que seja possível inserir dados numa base de dados MySql em C#, é necessário adicionar a referência MySql.Data. Para isso é necessário efectuar o download do mysql-connector-net-6.2.3. Depois é só correr o setup. (No fim é necessário reiniciar o Visual Studio)
Para adicionar uma referência:
- Clicar com o botão direito em Referência e fazer “Add Reference”.
- Seleccionar na lista MySql.Data no separador .NET
- Como a referência já está adicionada, temos de a inserir no código.
Agora vamos ao código
1º - Temos de adicionar um MySqlConnection, MySqlDataAdapter e um DataSet.
O MySqlConnection, MySqlDataAdapter e o DataSet, são necessários para a conexão e leitura da base de dados.
2º - Criar o “layout” da mini aplicação.
3º - Código do botão “Gravar”
4º - Código do método de visualização de dados
Este método será “chamado” no botão Visualizar, como exemplificado na imagem abaixo.
E o resultado será:
E assim finalizamos este tutorial.
Como certamente verificaram, é extremamente simples fazer uma ligação e inserção com MySQL utilizando C#. Espero que tenham gostado.
Download: Mysql Connector Net (6.2.3)
Homepage: MySql
Este artigo tem mais de um ano
Muito bom, obrigado pela dica.
Bom Post! 😉
No futuro vai dar jeito 🙂
Cumps
Usem LINQ, é a melhor forma de ler e escrever numa base de dados…
Diria antes… Usem a Entity Framework…!!
E porque não NHibernate..
São tudo boas dicas, mas penso que o objectivo é o de ser um tutorial simples, sem grandes pormenores.
Cumps
ADO.net you mean… usar essas frameworks sem saber o que se passa por tras pode levar a erros e falhas de segurança evitáveis
Eu desenvolvi um framework proprio. Que faz a conexão com o banco, abre a transação, insere, tudo ok. commit, senão roolback.
tenh controle de tudo.
ai o metodo que insere ficaria assim
try
{
if (formularioIncluir)
EmailEnvioCtr.Incluir(objSelecionado);
else
EmailEnvioCtr.Alterar(objSelecionado);
if (bReloadForm)
ReloadForm();
return true;
}
catch (Exception e)
{
CodeUtil.mensagemAlerta(e.Message);
return false;
}
public void Incluir(mdoEmailEnvio obj)
{
try
{
obj.emlEnvCodigo = ctrDbContext.Dao.ObterIncluirID(obj.modNomeTabela, “emlEnvCodigo”);
ctrDbContext.Dao.BeginTransaction();
ctrDbContext.Dao.Inserir(obj);
ctrDbContext.Dao.Commit();
}
catch (ConstraintException)
{
ctrDbContext.Dao.Rollback();
throw new Exception(“Registros duplicados.”);
}
catch (Exception exception)
{
ctrDbContext.Dao.Rollback();
throw new Exception(exception.Message);
}
}
@OFF TOPIC
Boas, será que alguém poderia fazer um review do Folio 100 da Toshiba, gostava de ver comparações com outros do mesmo sector.
Obrigado.
Viva,
Desde já louvo a iniciativa de fazer estes tutoriais, que apesar de serem coisas simples, existem poucos sites que demonstrem com exemplos práticos e objectivos como fazer as coisas, dando uma boa base para se entender e desenvolver para algo mais complexo.
No entanto quero aqui assinalar algo que se deverá ter em atenção, para evitar surpresas desagradáveis.
Pela maneira como o código está feito, é permitida a situação de code-injection, através das text box, pelo que, um utilizador mais “espertinho”, poderia tentar inserir “exec sp_msforeachtable ‘drop table ?” nas text boxes e ao fim de algumas tentativas a BD estava limpa.
Para evitar estas situações o melhor é usar na variável command a opção Parameters.Add em vez de ter a string de query “hard-coded”. Dessa forma o proprio MySQL valida o texto inserido pelo utilizador e bloqueia brincadeiras do tipo que referi atrás.
No caso em concreto do exemplo, as probabilidades deste tipo de situações acontecerem são muito baixas, pois as text boxes são usadas para fazer inserts na BD, mas se fossem usadas para querys, então era quase certo que por esta via ia haver problemas.
Espero que o meu comentário seja útil, servindo apenas para que use este tutorial (bastante bom, algo a que o PPLWARE já nos habituou 😉 ) possa ter noção de como proteger a sua BD de uma maneira bastante simples.
Bom trabalho, continuem assim.
Um abraço
@Filipe
Caro Filipe, o teu comentário é muito pertinente. De facto as regras de segurança não estão a 100%, mas por exemplo, um erro comum de segurança nas querys é utilizar o “select * from …”, deve ser sempre indicados quais os campos, por exemplo “select nome, descricao from …”. Neste tutorial também não foram colocados os “try e catch”, que são sempre necessários. O principal objectivo deste tutorial é mesmo fazer uma pequena demonstração de como fazer a ligação C# + MySQL. De qualquer forma, volto a frisar que o teu comentário é bastante pertinente.
Cumprimentos,
HM
Sugestao para proximo tutorial: uma versao melhorada e correcta de como inserir/seleccionar dados na base de dados.
Nos dias de hoje, este tutorial so’ deve ser visto como o que nao se deve fazer. Isto tanto em C# com em qualquer outra linguagem.
“Pau que nasce torto, dificilmente se indireita”
Fiquem Bem!
Caro Ricardo,
Não sei se tem seguido os tutoriais de C#, pois se os tiver a seguir irá reparar que os tutoriais têm sido introdutórios. Isto é, servem para explicar sobretudo conceitos básicos. Não estamos aqui para explicar aos “experts”, mas sim a pessoas que pretendam saber alguma coisa sobre C#.
Sendo assim, desafio-o a fazer um tutorial de “uma versao melhorada e correcta de como inserir/seleccionar dados na base de dados.” Dessa forma iremos certamente ver o quanto entendido na área é, e a sua “critica” passa a ser construtiva, pois criticas destrutivas estão reservadas quase sempre para os ignorantes.
Cumps.
Hélio M
O facto de os tutoriais serem introdutorios nao significa que nao se possa comecar com a melhor forma de usar uma linguagem, principalmente quando se trata de SQL, que tem uma lista longa de problemas e falhas de seguranca.
Por ter visto pessoal que comeca da forma mais “facil” e depois descobre que estao num poco, alguma das vezes, impossivel/dificil de sair, e’ que comentei, porque e’ preciso que quem veja este artigo (que tirando esta parte, esta’ perfeito) comece bem.
Um expert em C# pode precisar de usar SQL e desta forma tem um tutorial que lhe da’ boas bases.
Nao uso C# e os meus conhecimentos da linguagem sao principalmente da sintaxe e logica. No entanto, nao foi complicado fazer o mesmo no C#. Usei o mono para testar.
“Tutorial”
http://forum.pplware.com/showthread.php?tid=7698
PS: Infelizmente, interpretaste mal o meu comentario. Os ignorantes nao sabem o problema que e’ nao escapar caracteres especiais nos select/insert/delete/etc. Neste caso, os que sabem e’ que criticam.
Fiquem Bem!
olá, muito bom o Tuto mas eu gostaria de aprender todos os comandos, inserir, selet, update, o principal que estou com mais dificuldade é o DELET, por favor se puder me ajudar, mande o tutorial completo por email… brigado e bom trabalho!
Muito bom este tutorial.
Precisava mesmo de algo deste género, e já procurei em vários sitios. É a primeira vez que visito este site, e reparei que têm outros tutoriais.
Acabaram de ganhar um novo “visitante”.
JFilipe
Usar try / catch não seria mau 🙂
Aquilo é robusto, nunca falha! 😀
isto é um tutorial, deve cingir-se ao que é fundamental, para não criar “distracções”
uma dica: usem LINQ. Podem dizer que perdem controlo, mas o ganho é imenso
Boas,
Nunca deves construir comandos SQL concatenando parâmetros vindos de textbox do interfaces, corres o risco de SQL Injection.
Agora só faltava a parte da pesquisa para encontrar registos na base de dados….
Tutorial 5*.
Agora era seguir a onda dos comentários e fazer um tutorial sobre segurança em Base de dados … 😛
Muito bom o tutorial.
Poderiam fazer mais deste género – C# + MySQL?
Obrigado.
Cumprimentos,
AndreLC
Alguém me pode direccionar para os próximos tutoriais:
editar e remover . É que não estou a conseguir encontra-los e gostava muito de ter umas bases.
Obrigado
some useful C# ado.net source code
http://csharp.net-informations.com/data-providers/csharp-dataproviders-tutorial.htm
bn.
C# ado.net help
http://csharp.net-informations.com/data-providers/csharp-dataproviders-tutorial.htm
Boas, achei a iniciativa espectacular, no entanto gostaria de saber se existe algum tutorial para o botão de remover???
Boas,
Basicamente o que tens de fazer é:
MySqlCommand command = new MySqlCommand(“DELETE FROM (nometabela) WHERE id = (qualquercoisa) “, mConn);
Abraço
não funciona
Muuuuito bom, funcionou certinho. obrigado pelo exemplo.
Bom eu segui o tutorial, mas mesmo assim meu programa não funcionou. Estava dando um erro dizendo que a conexão com o banco de dados mysql estava sendo negada e que o password não existia.
Procurando na net eu descobri que se eu trocar a seguinte linha de comando:
mConn = new MySqlConnection(“Persist Security Info=False; server=localhost;database=pplware_bd;uid=root”);
Por esta:
mConn = new MySqlConnection(“Persist Security Info=False; server=localhost;database=pplware_bd;Userid=root;PWD=root”);
A conexão era realizada…
Só quero deixar aki a minha dúvida e como solucionei para aqueles que estão aprendendo a programar como eu….
vlw!!!
Excelente tutorial. Muito simples, funcional e não deixa mais confuso o programador iniciante como eu. Parabéns!
MANO, TE AMO!! kkkk Tua solução foi a única e mais clara que consegui para fazer minha aplicação para meu TCC que funcionou!!
Grato, Parabéns cara!!!
Como eu faço para acessar o dataGridView de outra classe? Eu queria deixar o código do banco fora do meu form 🙂
Obrigado pela atenção
como mostra um campo data mysql gridvew
olá, sou iniciante em c# e achei suas explicações ótimas.
No entanto, meu código não deu certo. o programa executa tudo certinho, mas quando chego para cadastrar ele aparece o seguinte erro: ” System.InvalidOperationException: ‘Connection must be valid and open.’
“. poderia me ajudar?
Desde já agradeço
Olá Guilherme,
Tudo bem?
Esse problema pode estar relacionado com duas situações:
1- Não tem o código mConn.Open();
2- O seu servidor onde se encontra a base de dados MySQL não está a permitir conexões remotas (se estiver a utilizar o CPANEL, tem lá opção para dar essa permissão)
Abraço,
Hélio Moreira
Value pela dica, me ajudou muito.
Valeu pela dica, me ajudou muito.