Quantcast

Tutorial C# – Inserção de dados em MySQL

38 Comentários

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

Partilhar:
Tags:

Comentários

38
  1. MO
    moedinha

    Muito bom, obrigado pela dica.

    1. RF

      Bom Post! 😉
      No futuro vai dar jeito 🙂

      Cumps

  2. TP
    TP

    Usem LINQ, é a melhor forma de ler e escrever numa base de dados…

    1. US
      user

      Diria antes… Usem a Entity Framework…!!

      1. CR
        Carlos Rodrigues

        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

      2. MR
        Miguel Ribeiro

        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

        1. NA
          Nalmir

          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);
          }
          }

  3. SE

    @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.

  4. FI
    Filipe

    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

    1. HM
      Hélio Moreira

      @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

      1. RE
        Ricardo Elias

        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!

        1. HM
          Hélio Moreira

          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

          1. RE
            Ricardo Elias

            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!

          2. RP

            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!

  5. JF
    José Filipe

    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

  6. MA
    Marco Areosa

    Usar try / catch não seria mau 🙂

    1. FL

      Aquilo é robusto, nunca falha! 😀

    2. SÉ
      Sérgio

      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

  7. FL
    flowdopip

    Boas,
    Nunca deves construir comandos SQL concatenando parâmetros vindos de textbox do interfaces, corres o risco de SQL Injection.

  8. PM
    Pedro Martinho

    Agora só faltava a parte da pesquisa para encontrar registos na base de dados….

  9. XF
    Xf-18

    Tutorial 5*.
    Agora era seguir a onda dos comentários e fazer um tutorial sobre segurança em Base de dados … 😛

  10. AN
    AndreLC

    Muito bom o tutorial.

    Poderiam fazer mais deste género – C# + MySQL?

    Obrigado.

    Cumprimentos,
    AndreLC

  11. FS
    Filipe Sousa

    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

  12. AN
    Andre

    Boas, achei a iniciativa espectacular, no entanto gostaria de saber se existe algum tutorial para o botão de remover???

    1. HM
      Hélio Moreira

      Boas,

      Basicamente o que tens de fazer é:

      MySqlCommand command = new MySqlCommand(“DELETE FROM (nometabela) WHERE id = (qualquercoisa) “, mConn);

      Abraço

      1. RP
  13. JA
    Jackson

    Muuuuito bom, funcionou certinho. obrigado pelo exemplo.

  14. TA
    Tarcisio

    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!!!

  15. DI
    Dival

    Excelente tutorial. Muito simples, funcional e não deixa mais confuso o programador iniciante como eu. Parabéns!

  16. PH
    Pedro Henrique

    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!!!

  17. DF
    Diego Fortes

    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

  18. CM
    claudenir aparecido monteiro

    como mostra um campo data mysql gridvew

  19. GO
    Guilherme Tinen Ortolani

    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

    1. HM
      Hélio Moreira

      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

  20. AM
    All Malaba

    Value pela dica, me ajudou muito.

  21. AM
    All Malaba

    Valeu pela dica, me ajudou muito.

Deixe um comentário