none
Problema ao inserir dados no access RRS feed

  • Pergunta

  • Bom, sou novo em desenvolvimento com o C# Windows Form. Recentemente estava fazendo uma aplicação simples de cadastro de artigos de loja, utilizando o Access 2010 como banco. Fiz um SELECT na aplicação buscando dados que já estavam salvos no BD. O problema é com a inserção, aparentemente estava funcionando normalmente, mas ao recompilar a aplicação e conferir no BD, os dados não foram inseridos. Segue o Código:

     private void btnGrava_Click(object sender, EventArgs e)
            {
                if (vmodo == "novo")
                {
                    OleDbConnection con = new OleDbConnection();
                    con.ConnectionString = Properties.Settings.Default.bdQueBomConnectionString;
                    try
                    {
                        con.Open();
                        OleDbCommand Cmm = new OleDbCommand();
                        Cmm.CommandText = "INSERT INTO tbProdutos (descricao, vlr_venda, vlr_compra, qtd_estoque) VALUES ( '"
                                           + txtDescricao.Text + "' ," + Convert.ToString(Convert.ToDecimal(txtPrecoVenda.Text)).Replace(",", ".") + ","
                                           + Convert.ToString(Convert.ToDecimal(txtPrecoCompra.Text)).Replace(",", ".") + ","
                                           + Convert.ToString(Convert.ToDecimal(txtEstoque.Text)) + ")";
                        Cmm.CommandType = CommandType.Text;
                        Cmm.Connection = con;

                        Cmm.ExecuteNonQuery();
                        MessageBox.Show("Inclusão efetuada com sucesso");
                        con.Close();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(String.Format("Falha na inserção de Registro Novo : {0}", ex.Message));
                    }
                }
            }

    Não consegui achar o motivo de não estar funcionando, atenciosamente gostaria de ajuda. Obrigado!

    sexta-feira, 24 de abril de 2015 20:04

Respostas

  • onde está seu banco de dados?

    ele foi incluído ao projeto?

    Se sim, verifica se a propriedade Copy to Output Directory está como Copy Always, altera pra Do Not Copy.

    e testa novamente.

    Abraço!


    Natan

    • Marcado como Resposta Sâmeck Zanela quarta-feira, 29 de abril de 2015 20:48
    quarta-feira, 29 de abril de 2015 00:32

Todas as Respostas

  • Até hoje não fiz nada que envolvesse .NET e Access (utilizo bastante SQL Server e Oracle), mas a sugestão é que vc tente verificar o arquivo Access imediatamente após a inclusão. Certifique-se de que os dados constam realmente no arquivo e, após isto, encerre o sistema.

    Faça então um novo teste e veja se os dados foram realmente persistidos.

    É uma sugestão simples, mas é um bom começo para se tentar trilhar o problema.

    sexta-feira, 24 de abril de 2015 21:22
  • você recebe a mensagem que foi salvo com sucesso?

    seu código aparentemente está correto, e só não deveria guardar as informações se você estivesse trabalhando com transactions, o que não é.

    teste inicialmente sem a concatenação dos parâmetros.. usando apenas o texto simples:

    "INSERT INTO tbProdutos (descricao, vlr_venda, vlr_compra, qtd_estoque) VALUES ( 'TESTE',1,2,3)" ;

    inclui também uma variável que receba o retorno do método executeNonQuery:

    int i = cmm.ExecuteNonQuery();

    se i for zero, então não gravou nada, mas não gera erro.


    Natan


    sábado, 25 de abril de 2015 00:21
  • Olá Natan, obrigado pela ajuda. Eu mudei um pouco o código, tirei a concatenação e utilizei Parameters, inclusive adicionei um UPDATE, mas continua com o mesmo problema, eu faço a inserção ou atualização dos dados, funciona normalmente, mas quando recompilo a aplicação não está o que tinha mudado. O estranho que eu acompanhei com break points antes de fechar a aplicação, e o comando vai no banco e busca o que mandei, mas quando recompilo o cenário muda.

    segue o código:

     private void btnGrava_Click(object sender, EventArgs e)
            {
                if (vmodo == "novo")
                {
                    OleDbConnection con = new OleDbConnection();
                    con.ConnectionString = Properties.Settings.Default.bdQueBomConnectionString;
                    try
                    {
                        
                        OleDbCommand Cmm = new OleDbCommand();
                        //Cmm.CommandText = "INSERT INTO tbProdutos (descricao, vlr_venda, vlr_compra, qtd_estoque) VALUES ( '"
                        //                   + txtDescricao.Text + "' ," + Convert.ToString(Convert.ToDecimal(txtPrecoVenda.Text)).Replace(",", ".") + ","
                        //                   + Convert.ToString(Convert.ToDecimal(txtPrecoCompra.Text)).Replace(",", ".") + ","
                        //                   + Convert.ToString(Convert.ToDecimal(txtEstoque.Text)) + ")";
                        Cmm.CommandText = "INSERT INTO tbProdutos (descricao, vlr_venda, vlr_compra, qtd_estoque) VALUES (?,?,?,?)";
                        Cmm.Parameters.Clear();
                        Cmm.Parameters.Add("@descricao", OleDbType.VarChar, 50).Value = txtDescricao.Text;
                        Cmm.Parameters.Add("@vlr_venda", OleDbType.Decimal, 18).Value = txtPrecoVenda.Text;
                        Cmm.Parameters.Add("@vlr_compra", OleDbType.Decimal, 18).Value = txtPrecoCompra.Text;
                        Cmm.Parameters.Add("@qtd_estoque", OleDbType.Integer, 18).Value = txtEstoque.Text;

                        Cmm.CommandType = System.Data.CommandType.Text;
                        Cmm.Connection = con;
                        con.Open();     
                        Cmm.ExecuteNonQuery();
                        MessageBox.Show("Inclusão efetuada com sucesso");
                        con.Close();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(String.Format("Falha na inserção de Registro Novo : {0}", ex.Message));
                    }
                }


                //-----------------------altera-----------------------------------------
                if (vmodo == "alterar")
                {
                    if (txtCodigo.Text == "")
                    {
                        MessageBox.Show("Pesquise um produto antes.");
                    }
                    else
                    {
                        OleDbConnection con = new OleDbConnection();
                        con.ConnectionString = Properties.Settings.Default.bdQueBomConnectionString;
                        try
                        {
                            con.Open();
                            OleDbCommand Cmm = new OleDbCommand();
                            Cmm.CommandText = "UPDATE tbProdutos SET descricao = ?, vlr_venda ?, vlr_compra = ?, qtd_estoque = ? WHERE cod_produto = ? ";
                            Cmm.Parameters.Clear();
                            Cmm.Parameters.Add("@descricao", OleDbType.VarChar, 50).Value = txtDescricao.Text;
                            Cmm.Parameters.Add("@vlr_venda", OleDbType.Decimal, 18).Value = txtPrecoVenda.Text;
                            Cmm.Parameters.Add("@vlr_compra", OleDbType.Decimal, 18).Value = txtPrecoCompra.Text;
                            Cmm.Parameters.Add("@qtd_estoque", OleDbType.Integer, 18).Value = txtEstoque.Text;
                            Cmm.Parameters.Add("@cod_produto", OleDbType.Integer, 18).Value = txtCodigo.Text;

                            Cmm.CommandType = CommandType.Text;
                            Cmm.Connection = con;

                            Cmm.ExecuteNonQuery();
                            MessageBox.Show("Alteração efetuada com sucesso");
                            con.Close();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(String.Format("Falha na inserção de Registro Novo : {0}", ex.Message));
                        }
                    }
                }
            }

    Muito Obrigado pela ajuda!

    terça-feira, 28 de abril de 2015 19:46
  • onde está seu banco de dados?

    ele foi incluído ao projeto?

    Se sim, verifica se a propriedade Copy to Output Directory está como Copy Always, altera pra Do Not Copy.

    e testa novamente.

    Abraço!


    Natan

    • Marcado como Resposta Sâmeck Zanela quarta-feira, 29 de abril de 2015 20:48
    quarta-feira, 29 de abril de 2015 00:32
  • Até hoje não fiz nada que envolvesse .NET e Access (utilizo bastante SQL Server e Oracle), mas a sugestão é que vc tente verificar o arquivo Access imediatamente após a inclusão. Certifique-se de que os dados constam realmente no arquivo e, após isto, encerre o sistema.

    Faça então um novo teste e veja se os dados foram realmente persistidos.

    É uma sugestão simples, mas é um bom começo para se tentar trilhar o problema.

    Muito Obrigado pela ajuda Renato Groffe
    quarta-feira, 29 de abril de 2015 00:32
  • Está na pasta do projeto.

    Está sim. Foi a primeira propriedade que verifiquei quando ocorreu o problema rsrs.

    Abraços.

    quarta-feira, 29 de abril de 2015 20:50