none
Utilizando parâmetros: Salvar valor(preço) RRS feed

  • Pergunta

  • Olá pessoal estou criando uma aplicação aqui, com o intuito de salvar no banco de dados informações sobre datas de validades dos produtos.

    Estou utilizando o modo parametrizado para salvar as informações no BD.

    Quando clico no botão salvar o visual studio retorna um erro que é o seguinte:

    FormatException was unhandled.

    Falha ao converter valor de parâmetro de String em Decimal.

    Segue abaixo meu código para que vocês possam dar uma analisada:

    namespace No_Loss_V1
    {
        public partial class CadProd : Form
        {
            string StrCon = "Provider=msdaora;Data Source=xe; User Id=desv; Password=desv;";
            OleDbDataAdapter DaProd;
            DataSet dsProd;

            public CadProd()
            {
                InitializeComponent();
                string SelectProd = "Select * from produtos";
                DaProd = new OleDbDataAdapter(SelectProd, StrCon);
                dsProd = new DataSet("produtos");
                DaProd.Fill(dsProd);

                OleDbCommand Ins;

                string StrIns = "insert into produtos(lote,descr_produto,data_fab,data_venc,quantidade,preco)values(?,?,?,?,?,?)";
                Ins = new OleDbCommand(StrIns);
                Ins.Parameters.Add(":LOTE",OleDbType.Numeric,50,"LOTE");
                Ins.Parameters.Add(":DESCR_PRODUTO", OleDbType.VarChar, 100, "DESCR_PRODUTO");
                Ins.Parameters.Add(":DATA_FAB", OleDbType.Date,50,"DATA_FAB");
                Ins.Parameters.Add(":DATA_VENC", OleDbType.Date,50, "DATA_VENC");
                Ins.Parameters.Add(":QUANTIDADE", OleDbType.Numeric, 4, "QUANTIDADE");
                Ins.Parameters.Add(":PRECO", OleDbType.Numeric, 6, "PRECO");

                Ins.Connection = new OleDbConnection(StrCon);
                DaProd.InsertCommand = Ins;
            }
            private void limpar() 
            {
                TbDescr.Clear();
                TbLote.Clear();
                MtbPreco.Clear();
                mtbQtd.Clear();
                mtbDataFab.Clear();
                mtbDataVenc.Clear();
            }
            private void BtCancelar_Click(object sender, EventArgs e)
            {
                if (MessageBox.Show("Deseja realmente cancelar o cadastro?? \nOs dados não serão salvos", "Aviso", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
                {
                    limpar();
                }
            }

            private void BtSalvar_Click(object sender, EventArgs e)
            {
                DataRow reg = dsProd.Tables[0].NewRow();
                reg["LOTE"] = TbLote.Text;
                reg["DESCR_PRODUTO"] = TbDescr.Text;
                reg["DATA_FAB"] = mtbDataFab.Text;
                reg["DATA_VENC"] = mtbDataVenc.Text;
                reg["QUANTIDADE"] = mtbQtd.Text;
                reg["PRECO"] = MtbPreco.Text;

                dsProd.Tables[0].Rows.Add(reg);
                DaProd.Update(dsProd);

                MessageBox.Show("Gravado com sucesso!!!", "Êxito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                limpar();
            }
        }
    }

    sábado, 19 de janeiro de 2013 22:59

Respostas

  • Olá Angelo,

    Tudo beleza?

    Provavelmente um dos textboxes que armazenam valores númericos contém algum character inválido que não permite a conversão para decimal. Por conta disso o erro de formatação impede a conversão de string para decimal.

    Verifique se o seu campo contém "R$" ou se esta no formato Americano.

    Algum destes pontos esta impedindo a conversão para decimal.

    []s!


    MSc. Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Visual C#
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Angelo C. Silva terça-feira, 22 de janeiro de 2013 00:34
    segunda-feira, 21 de janeiro de 2013 02:02
    Moderador

Todas as Respostas

  • Não consigo saber se o erro está relacionado com o preço ou as datas na hora de inserir no banco.
    sábado, 19 de janeiro de 2013 23:06
  • Olá Angelo,

    Tudo beleza?

    Provavelmente um dos textboxes que armazenam valores númericos contém algum character inválido que não permite a conversão para decimal. Por conta disso o erro de formatação impede a conversão de string para decimal.

    Verifique se o seu campo contém "R$" ou se esta no formato Americano.

    Algum destes pontos esta impedindo a conversão para decimal.

    []s!


    MSc. Fernando Henrique Inocêncio Borba Ferreira
    Microsoft MVP - Visual C#
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marcado como Resposta Angelo C. Silva terça-feira, 22 de janeiro de 2013 00:34
    segunda-feira, 21 de janeiro de 2013 02:02
    Moderador
  • Achei o erro, o OleDbtype da coluna "Lote" estava errado. Eu coloquei numeric ao invés de VarChar.
    E havia outro erro tbm que era a mascara do MaskedTextBox.

    Corrigido esses detalhes foi possivel salvar no banco de dados.

    Valeuuuu!!!!

    terça-feira, 22 de janeiro de 2013 00:31