none
Erro String para Decimal. C# windowsforms. RRS feed

  • Pergunta

  • Fala pessoal, estou com problema que não consigo solução, apesar de ja ter feito quase de tudo. estou realizando um update em uma tabela (SqlServer)  e recebo erro de conversão de varchar para Decimal. 

    ja converti com o Convert.todecimal, decimal.parse , ja criei um variável decimal pra receber o resultado convertido. não importa o que eu faça o resultado sempre fica 0.00 então como exemplo o valor é 1,90 fica 1.9 

    e a peste continua dando erro. Alguem tem alguma sugestão ? 

      string CC1 = Convert.ToString(dgTsDA.CurrentRow.Cells[11].Value);  // campo c1
    
     if ( CC1 == vaz)
       { cc1c = cc4c; }
     else
       {
        CC1 = CC1.Replace(".", ",");
        cc1c = Math.Round(Convert.ToDecimal(CC1), 2);                  
     //cc1c = Convert.ToDecimal(CC1);
     //cc1c = Convert.ToDecimal(CC1.ToString().Replace(".",","));
     //cc1c = Convert.ToDecimal(CC1.ToString().Replace(",",",")); 
       }
    segunda-feira, 18 de janeiro de 2016 16:15

Respostas

  • Sua forma de utilizar o comando SQL nao é a mais indicada por varias razoes (Injeçao SQL, p. ex). O que ocorre é que voce converte CC1 em decimal (  cc1c = Math.Round(Convert.ToDecimal(CC1), 2);         ) e depois voce reconverte implicitamente cc1c  em string (o que faz que o ponto seja reconvertido em virgula) neste pondo to codigo:

     " C1 = '" + cc1c + "

    o correto seria fazer assim:

    ... " C1 = '" + CC1.Replace(",", ".")+ " ...

    mas a forma realmente correta é a utilizaçao de parametros:

    http://www.macoratti.net/09/07/c_adn_7.htm

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    segunda-feira, 18 de janeiro de 2016 17:28
    Moderador

Todas as Respostas

  • Tente enviar ainda como string para o banco, eu fiz assim e funcionou 

    Math.Round(Convert.ToDecimal(CC1), 2).ToString().Replace(',', '.')


    Por favor, lembre-se de “Marcar como Resposta” as respostas que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    • Sugerido como Resposta Erick WendelMVP segunda-feira, 18 de janeiro de 2016 16:35
    segunda-feira, 18 de janeiro de 2016 16:35
  • poste a parte do codigo onde voce faz o update.

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    segunda-feira, 18 de janeiro de 2016 16:36
    Moderador
  • Erick, mesmo mandando como string o erro persiste. Já havia tentando dessa forma, quando gravo na tabela o registro passo como decimal. assim:

    cc1c = Convert.ToDecimal(CC1);

    na teoria deveria funcionar igual. mas dá esse erro.

    Vai entender!!

    segunda-feira, 18 de janeiro de 2016 17:02
  • Oi Willian, segue abaixo.
    comm2.CommandText = "UPDATE Tbl_DiaFr SET  De = '" + d1 + "'," + " Para = '" + p1 + "'," + " Par = '" + Hp + "',"+ " Dec = '" + Hd + "'," + " Pou = '" + Hpo + 
    "'," + "Cor = '" + Hco + "'," + " Diu = '" + hodiu + "',"
    + " Notur = '"+ hnot + "',"+ " Tot_par = '" + totp + "'," + " Tot_po = '" + totpo + "' , "+ " C1 = '" + cc1c + "',"  + " DataV = '" + datVenc + "',"+ " id_Piloto = '" + idp1 + "'," + " N_Pil = '" + pil + "',"+ " Num_Dia = '" + numdi + "' , " 
    + " Natureza = '" + natu + "',"+ " dataGravacao = '" + data + "'," + " id_usuario = '" + us + "'," + " pax = '" + pas + "'," + " carga = '" + carg + "',"+ " Gu = '" + Guin + "',"
    + " Local = '" + locala + "',"+ " QTY = '" + qd + "' , " 
     + " Nota = '" + nt + "' , " + " CAncPi = '" + cODP + "' , "+ " LocalizDe = '" + lt1 + "' , " + " LocalzPara = '" + lt2 + "' , " + " Cliente = '" + clientenome + "' , " + " jornIni = '" + mtb1 + "' , " + " jornRefIni = '" + mtb2 + "' , " + " jornRefFin = '" + mtb3 + "' , " + " jornFina = '" + mtb4 + "' WHERE id_DiarFro = " + iddia + "";
    att wsti.
    segunda-feira, 18 de janeiro de 2016 17:10
  • Sua forma de utilizar o comando SQL nao é a mais indicada por varias razoes (Injeçao SQL, p. ex). O que ocorre é que voce converte CC1 em decimal (  cc1c = Math.Round(Convert.ToDecimal(CC1), 2);         ) e depois voce reconverte implicitamente cc1c  em string (o que faz que o ponto seja reconvertido em virgula) neste pondo to codigo:

     " C1 = '" + cc1c + "

    o correto seria fazer assim:

    ... " C1 = '" + CC1.Replace(",", ".")+ " ...

    mas a forma realmente correta é a utilizaçao de parametros:

    http://www.macoratti.net/09/07/c_adn_7.htm

    att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    segunda-feira, 18 de janeiro de 2016 17:28
    Moderador