none
inserir centavos no campo money RRS feed

  • Pergunta

  • Porque quando eu vou salvar um valor no banco ele não insere os campos centavos no valor total?

    public static void Update(int IDSubvention, int Year, string srk_igreja, decimal total)
    {
    AcessoDados.ExecutarDados("UPDATE Subvention SET Total = Convert(decimal," + total + ") WHERE [IDSubvention] = " + IDSubvention + ", "conexao");
    }

    no banco esta como Money na variável total aparece 26.30 mas quando eu salvo salva como 26.00

    se eu tirar o Convert(Decimal) ele da erro na sintase.

    Help...

    segunda-feira, 29 de abril de 2013 17:12

Todas as Respostas

  • Eu estou com uma dificuldade aparentemente simples mas q estou conseguindo me complicar com ela..

    Eu tenho um UPDATE que deve atualizar uma campo Total do tipo MONEY na minha tabela do banco de dados, a minha variável (ASP NET C#) esta como decimal o problema é que quando eu vou enviar o valor da variável para atualizar no banco ao invés dela salvar respeitando os campos decimais da variável 25.09 ele junta tudo e salva no banco 2509,0000 eu já tentei algumas conversões dessa variável mas não deu certo ainda...

    Obs.: o valor esta chegando como decimal na variável total Ex. 25.98, qdo eu tento salvar esse valor com os ' ' (apliques) ele salva tipo 2598,0000 e sem os ' ' (apliques) da erro de sintaxe do código... 

    public static void Update(int IDSubvention, int Year, string srk_igreja, decimal total)
    {
    
    AcessoDados.ExecutarDados("UPDATE tb.Teste SET [Total] = '" + total + "' WHERE [IDSubvention] = " + IDSubvention + " AND [Year] = " + Year + " AND [Srk_Igreja] = '" + srk_igreja + "'", "conexao");
    
    }

    Help me...
    sábado, 27 de abril de 2013 16:44
  • Olá Jhonas,

    Deve ser a configuração de "idioma" do usuário de conexão do banco e as configurações regionais do servidor, que deve estar configurado para o ponto "." ser o separador de milhar e não decimal (pode ser o contrário também, pois, você está fazendo uma conversão para string, que irá utilizar as configurações regionais do servidor).

    Faça uma verificação, conforme exemplo abaixo, que força a conversão para uma cultura específica e teste qual resolve o seu caso:

    Decimal valor = 1000.56M;
    //Padrão americano, separador decimal é ponto
    string strEN = valor.ToString(new CultureInfo("en-US"));
    //Padrão brasileiro, separador decimal é vírgula
    string strBR = valor.ToString(new CultureInfo("pt-BR"));

    sábado, 27 de abril de 2013 19:35
  • veja

    http://stackoverflow.com/questions/6075067/two-decimal-places-for-decimal-money-field


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    segunda-feira, 29 de abril de 2013 12:27
    Moderador
  • coloque convert.toDouble

    Junior

    segunda-feira, 29 de abril de 2013 18:29
  • Eu coloquei mas tbem não deu certo...

    o cód que esta indo para o sql é esse:

    UPDATE Subvention SET Total = 12,32  WHERE [ID] = 1

    eu tentei inserir manualmente e ele não insere os centavos mas se eu mudar a vírgula e colocar um ponto ele insere corretamente.. 

    UPDATE Subvention SET[Total = 12.32  WHERE [ID] = 1

    então deduzo q o erro limita-se a enviar o código enviando ao invés de vírgula um ponto...

    estou precisando mto disso.. obrigado...

    segunda-feira, 29 de abril de 2013 21:04
  • Jhonas,

    Você tem outro tópico com problema relacionado a este que criou.

    Verifique se as respostas contida lá já não te ajudam.

    http://social.msdn.microsoft.com/Forums/pt-BR/aspnetpt/thread/945c9f8f-6f0c-4b6b-a316-2ae0cd5fce34/#945c9f8f-6f0c-4b6b-a316-2ae0cd5fce34

    segunda-feira, 29 de abril de 2013 21:46
  • Na verdade Diego aquela pergunta foi eu quem fiz tbem rs.. lá eu 

    Convert(decimal," + total + ")

    só que agora estou com esse problema...

    segunda-feira, 29 de abril de 2013 22:30
  • Eu usei o convert e inseriu no banco mas agora ele não insere os centavos..

    o cód que esta indo para o sql é esse:

    UPDATE Subvention SET Total = 12,32  WHERE [ID] = 1

    eu tentei inserir manualmente e ele não insere os centavos mas se eu mudar a vírgula e colocar um ponto ele insere corretamente.. 

    UPDATE Subvention SET[Total = 12.32  WHERE [ID] = 1

    então deduzo q o erro limita-se a enviar o código enviando ao invés de vírgula um ponto...

    estou precisando mto disso.. obrigado...

    segunda-feira, 29 de abril de 2013 22:32
  • Conforme você mesmo menciona, o seu problema está em passar o valor com "," que é o padrão de casas decimais brasileiro.

    No americano é ponto "." e é o que seu banco está esperando.

    Utilize a conversão em string para o padrão americano (que irá colocar . nas casas decimais), conforme citei anteriormente:

    Decimal valor = 1000.56M;
    
    //Padrão americano, separador decimal é ponto
    string strEN = valor.ToString(new CultureInfo("en-US"));
    

    segunda-feira, 29 de abril de 2013 23:45
  • Para sanar qualquer dúvida da utilização:

    public static void Update(int IDSubvention, int Year, string srk_igreja, decimal total)
    {
    
    AcessoDados.ExecutarDados("UPDATE tb.Teste SET [Total] = '" + total.ToString(new CultureInfo("en-US")) + "' WHERE [IDSubvention] = " + IDSubvention + " AND [Year] = " + Year + " AND [Srk_Igreja] = '" + srk_igreja + "'", "conexao");
    
    }

    Outro ponto: se você passar os valores utilizando parâmetros para o comando de atualização ao invés de concatenar em uma string, você não precisaria se preocupar com estas conversões, além de evitar outros problemas como SqlInjection e outros. Segue documentação e exemplo da utilização com parâmetros:

    http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlcommand.parameters.aspx

    segunda-feira, 29 de abril de 2013 23:51
  • Conforme respondido no outro:

    Para sanar qualquer dúvida da utilização:

    public static void Update(int IDSubvention, int Year, string srk_igreja, decimal total)
    {
    
    AcessoDados.ExecutarDados("UPDATE tb.Teste SET [Total] = '" + total.ToString(new CultureInfo("en-US")) + "' WHERE [IDSubvention] = " + IDSubvention + " AND [Year] = " + Year + " AND [Srk_Igreja] = '" + srk_igreja + "'", "conexao");
    
    }

    Outro ponto: se você passar os valores utilizando parâmetros para o comando de atualização ao invés de concatenar em uma string, você não precisaria se preocupar com estas conversões, além de evitar outros problemas como SqlInjection e outros (como um nome com caracter ' no meio). Segue documentação e exemplo da utilização com parâmetros:

    http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlcommand.parameters.aspx

    segunda-feira, 29 de abril de 2013 23:55