PplWare Mobile

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

                                    
                                

Este artigo tem mais de um ano


Autor: Hélio Moreira


  1. moedinha says:

    Muito bom, obrigado pela dica.

  2. TP says:

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

    • user says:

      Diria antes… Usem a Entity Framework…!!

      • Carlos Rodrigues says:

        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

      • Miguel Ribeiro says:

        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

        • Nalmir says:

          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. Senun says:

    @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. Filipe says:

    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

    • Hélio Moreira says:

      @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

      • Ricardo Elias says:

        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!

        • Hélio Moreira says:

          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

          • Ricardo Elias says:

            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!

          • Ricardo PC says:

            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. José Filipe says:

    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. Marco Areosa says:

    Usar try / catch não seria mau 🙂

  7. flowdopip says:

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

  8. Pedro Martinho says:

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

  9. Xf-18 says:

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

  10. AndreLC says:

    Muito bom o tutorial.

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

    Obrigado.

    Cumprimentos,
    AndreLC

  11. Filipe Sousa says:

    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. Andre says:

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

  13. Jackson says:

    Muuuuito bom, funcionou certinho. obrigado pelo exemplo.

  14. Tarcisio says:

    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. Dival says:

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

  16. Pedro Henrique says:

    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. Diego Fortes says:

    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. claudenir aparecido monteiro says:

    como mostra um campo data mysql gridvew

  19. Guilherme Tinen Ortolani says:

    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

    • Hélio Moreira says:

      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. All Malaba says:

    Value pela dica, me ajudou muito.

  21. All Malaba says:

    Valeu pela dica, me ajudou muito.

Deixe um comentário

O seu endereço de email não será publicado.

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. A administração deste site reserva-se, desde já, no direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.