none
Números "quebrados" e SQL Server RRS feed

  • Pergunta

  • Estou desenvolvendo um sistema que necessita de guardar dados numéricos com casas decimais OU NÃO. Para isso estou usando campos decimal(18,2) no banco e Double na aplicação. Passo os parâmetros direitinho, mas na hora de executar o comando dá erro de conversão, de Float para Decimal. Se eu mudo o tipo na aplicação para Decimal, o erro muda para "de numeric para decimal".

    Outra coisa, se eu uso números até 99 para preencher o formulário, tenho sucesso na inserção.

    Queria saber como guardar esse tipo de informação e qual a melhor forma de fazê-lo (tipos de dados indicados)

    Grato.

    segunda-feira, 14 de fevereiro de 2011 15:18

Respostas

  • Pessoal, vocês não vão acreditar. O erro era um parâmetro com nome errado ¬¬

    Obrigado a todos que responderam.

    • Marcado como Resposta Danilo Kleber segunda-feira, 14 de fevereiro de 2011 17:36
    segunda-feira, 14 de fevereiro de 2011 17:36

Todas as Respostas

  • Então Danilo vc poderia postar o seu código onde ocorre o erro?

     


    Estudar, Estudar e Estudar! Não existe caminho curto.
    segunda-feira, 14 de fevereiro de 2011 15:24
  • Obrigado pela resposta.

    Rapaz, não é em um lugar específico. Olha:

    Estou fazendo a conversão assim: logistica.KmMorta = CDbl(txtKmMorta.Text) // já tentei com Parse e Convert.ToDouble).

    Passo os parâmetros assim: comandoSql.Parameters.AddWithValue("decKMMorta", logistica.KmMorta)

    E o erro: Error converting data type numeric to decimal.

    segunda-feira, 14 de fevereiro de 2011 16:00
  • Danilo então fiz um teste aqui e funcionou vou lhe postar o código para vc analizar e comparar com o seu tenho um bd com o nome Teste1 com os seguintes campos:

     Id(int, PK),

     Altura(decimal(18,2)),

     Peso(decimal(18,2)) ]

    Aqui minha classe:

    namespace WindowsFormsApplication3
    {
      public class Teste2
      {
        public int Id { get; set; }
        public double Altura { get; set; }
        public double Peso { get; set; }
      }
    }
    

     

    e aqui um método para inserir que é chamado no click do botão:

    private void btnGravar_Click(object sender, EventArgs e)
        {
          Teste2 teste = new Teste2();
          teste.Altura = Convert.ToDouble(txtAltura.Text);
          teste.Peso = Convert.ToDouble(txtPeso.Text);
          Gravar(teste);
        }
    
        private void Gravar(Teste2 teste)
        {
          SqlConnection conn = new SqlConnection(@"Data Source=ZEGOIABA-PC\SQLEXPRESS;Initial Catalog=teste2;Integrated Security=True;Pooling=False");
          string sql = "INSERT INTO Teste1 (Altura, Peso) VALUES (@Altura, @Peso)";
          SqlCommand cmd = new SqlCommand(sql.ToString(), conn);
          cmd.Parameters.AddWithValue("@Altura", teste.Altura);
          cmd.Parameters.AddWithValue("@Peso", teste.Peso);
          conn.Open();
          cmd.ExecuteNonQuery();
          conn.Close();
        }
    

    Tá ai aqui rodou certinho!

    Abraços e espero ter ajudado qualquer dúvida posta ai!


    Estudar, Estudar e Estudar! Não existe caminho curto.
    segunda-feira, 14 de fevereiro de 2011 16:24
  • Danilo, tente passar o tipo do dado com o parametro, exemplo:

    SqlParameter = new SqlParameter("@par1", SqlDbType.Float, 8, varValor);

    Ou seja, se informa o parametro, typo, tamanho, e o valor do parametro.

    Abraço

    Estevam


    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    segunda-feira, 14 de fevereiro de 2011 16:54
  • Pessoal, vocês não vão acreditar. O erro era um parâmetro com nome errado ¬¬

    Obrigado a todos que responderam.

    • Marcado como Resposta Danilo Kleber segunda-feira, 14 de fevereiro de 2011 17:36
    segunda-feira, 14 de fevereiro de 2011 17:36