Usuário com melhor resposta
Erro String para Decimal. C# windowsforms.

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(",",",")); }
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
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator segunda-feira, 18 de janeiro de 2016 18:12
- Marcado como Resposta Wsti terça-feira, 19 de janeiro de 2016 10:39
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
-
poste a parte do codigo onde voce faz o update.
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
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!!
-
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. -
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
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam TrindadeModerator segunda-feira, 18 de janeiro de 2016 18:12
- Marcado como Resposta Wsti terça-feira, 19 de janeiro de 2016 10:39