none
Botão salvar RRS feed

  • Discussão Geral

  • tenho o seguinte código no botão salvar,  nos forms que tem apenas registros do tipo string, esta funcionando, esse é o primeiro form que faça com valores inteiros e decimais. Quando clico em salvar apresenta o seguinte erro: "Error converting data type varchar to numeric" , isso quando preencho os campos com que são de registros numéricos. Já quando nem preencho esses campos da o erro a seguir: "A cadeia de caracteres de entrada não estava em um formato incorreto."

    string sql = "insert into produtos(des_produto,ean,est_produto,un_medida,desc_reduzida,vl_produto,custo,margem)" +
                        "values('" + textBoxDescricao.Text + "','"
                        + textBoxBarras.Text + "','"
                        + Convert.ToDecimal(textBoxEstoque.Text) + "','"
                        + textBoxUnMedida.Text + "','"
                        + textBoxDesRed.Text + "','"
                        + Convert.ToDecimal(textBoxVlVenda.Text) + "','"
                        + Convert.ToDecimal(textBox1CustoPro.Text) + "','"
                        + Convert.ToDecimal(textBoxMarge.Text) + "')";

                    SqlConnection con = new SqlConnection();
                    con.ConnectionString = Properties.Settings.Default.Ducaun;
                    SqlCommand cmd = new SqlCommand(sql, con);
                    cmd.CommandType = CommandType.Text;
                    con.Open();
                    produtosDataGridView.Refresh();
                    try
                    {
                        int i = cmd.ExecuteNonQuery();
                        if (i > 0)
                            MessageBox.Show("Operação efetuada com sucesso !", "Mensagem do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erro: Erro Ao Gravar no banco de dados " + ex.ToString());
                    }
                    finally
                    {
                        con.Close();
                    }
                }
                else
                {
                    string sql = "update produtos set des_produto = '" + textBoxDescricao.Text +
                        "', ean = '" + textBoxBarras.Text +
                        ", est_produto = " + Convert.ToDecimal(textBoxEstoque.Text) +
                        "', un_medida = '" + textBoxUnMedida.Text +
                        "', desc_reduzida = '" + textBoxDesRed +
                        ", vl_produto = " + Convert.ToDecimal(textBoxVlVenda.Text) +
                        ", custo = " + Convert.ToDecimal(textBox1CustoPro.Text) +
                        ", margem = " + Convert.ToDecimal(textBoxMarge.Text);

                    SqlConnection con = new SqlConnection();
                    con.ConnectionString = Properties.Settings.Default.Ducaun;
                    SqlCommand cmd = new SqlCommand(sql, con);
                    cmd.CommandType = CommandType.Text;
                    con.Open();
                    produtosDataGridView.Refresh();
                    try
                    {
                        int i = cmd.ExecuteNonQuery();
                        if (i > 0)
                            MessageBox.Show("Operação efetuada com sucesso !", "Mensagem do Sistema", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erro: Erro Ao Gravar no banco de dados " + ex.ToString());
                    }
                    finally
                    {
                        con.Close();
                    }
                }

    quarta-feira, 7 de outubro de 2015 10:56

Todas as Respostas

  • @Junin

    Ja ouviste falar em parametos?

    Voce precisa usar parametros, veja este exemplo:http://stackoverflow.com/questions/12939501/insert-into-c-sharp-with-sqlcommand

    procura exemplo em portugues.

    Tu ja ouviste falar em classes?

    Precisas usar tambem, fica facil de arranjar teu codigo e manegar tambem: 


    A flower cannot blossom without sunshine, and man cannot live without love.

    quarta-feira, 7 de outubro de 2015 12:48
    Moderador
  • Bom dia!

    Você deve revisar os valores que passou no INSERT e no UPDATE, tem algum valor que não esta correspondente ao valor do campo na tabela do banco de dados.

    att., Bernard Johnson

    quarta-feira, 7 de outubro de 2015 13:38
  • Creio que entendi, basicamente o que farei então seria jogar o valor dos textbox para variáveis correspondente ao tipos de dados, e colocar nos parâmetros que qual campo da tabela, tipo cmd.parameters("vl_produto", variavel)? 
    quarta-feira, 7 de outubro de 2015 14:08
  • @Junin 

    este erro :1 -  "Error converting data type varchar to numeric" acontence quando voce tenta gravar, na tabela e alguns campos estao vazios. se uma textbox festiver vazio pode gerar este erro. o que voce tem de fazer e vereficar se o textbox estiver vazio voce nao converte apenas passa um valor direito neste caso seria Zero(0)

     textBoxEstoque.Text = 0; Por isso vais ter se utilizar parametros.

    Este erro: 2 -  "Error converting data type varchar to numeric" pode ser que na tabela voce definiu como char. 

    Este erro: "A cadeia de caracteres de entrada não estava em um formato incorreto." quer dizer que o teu insert esta errado. Os campos nao estao em ordem como na base de dados, Tabela.

    Este metodo esta no lugar errado:  produtosDataGridView.Refresh(); deveria estar no final do teu codigo e nao no meio.

    Tenta usar a palavra Using( comando)....Porque?

    Porque fecha a conecao mesmo se o codigo estiver erro, assim proteje a base de dados. 


     


    A flower cannot blossom without sunshine, and man cannot live without love.

    quarta-feira, 7 de outubro de 2015 14:25
    Moderador
  • sobre, o método produtosdatagridview.refresh(); foi a  maneira que encontrei de contornar um problema que estava tendo de quando salvo um registro, se eu ir na tela de pesquisa e carregar o registro para o form não esta vindo atualizado, só atualizava quando saia do sistema e entrava de novo, dessa forma estava funcionando, mais vou dar uma analisada no que você me disse.
    quarta-feira, 7 de outubro de 2015 16:29
  • VaLEU Levi, Me bati o dia inteiro ontem mais deu certo. Muito Obrigado.
    quinta-feira, 8 de outubro de 2015 11:49