Usuário com melhor resposta
Problema ao inserir dados no access

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!
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
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.
-
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
- Editado 'Natan Silva 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!
-
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
-
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.
-