ERRO INSERT ACCESS C#
Minha dúvida é bem simples para vocês que já estão nessa área a um tempo, eu comecei a pouco na luta pra virar programador.
Pois bem, vamos ao que interessa, uso Access como database e Visual C# para edita-lo.
Já usei 3tipos de commandos diferentes e nada da certo.
Este de baixo ele NAO APRESENTA ERROS de começo, mas quando clico botão salvar da o erro [Ô]Input string was not in a correct format.[Ô]
Código do BtSalvar.
Citação:private void button1_Click(object sender, EventArgs e)
{
OleDbConnection Con = new OleDbConnection(Properties.Settings.Default.ConnectionString);
Con.Open();
OleDbCommand cmd = new OleDbCommand([Ô]INSERT INTO Cliente ([Nome], [Endereco], [Telefone], [CPF], [RG][Ô] +
[Ô][CEP], [Email]) VALUES (@Nome,@Endereco,@Telefone,@CPF,@RG,@CEP,@Email)[Ô], Con);
cmd.Parameters.Add([Ô]@Nome[Ô], OleDbType.VarChar).Value = txtNome.Text;
cmd.Parameters.Add([Ô]@Endereco[Ô], OleDbType.Char).Value = txtEndereco.Text;
cmd.Parameters.Add([Ô]@Telefone[Ô], OleDbType.VarNumeric).Value = Convert.ToDecimal(masktxtTel.Text);
cmd.Parameters.Add([Ô]@CPF[Ô], OleDbType.VarNumeric).Value = Convert.ToDecimal(masktxtCPF.Text);
cmd.Parameters.Add([Ô]@RG[Ô], OleDbType.VarNumeric).Value = Convert.ToDecimal(masktxtRG.Text);
cmd.Parameters.Add([Ô]@CEP[Ô], OleDbType.VarNumeric).Value = Convert.ToDecimal(masktxtCEP.Text);
cmd.Parameters.Add([Ô]@Email[Ô], OleDbType.VarChar).Value = txtEmail.Text;
cmd.ExecuteNonQuery();
MessageBox.Show([Ô]Dados Adicionados com Sucesso ![Ô]);
Con.Close();
Nos campos Numericos uso maskedtextbox nos outros textbox. Usei o Convert pq ele ja tava dando erro dizendo q n podia converte string pra decimal.
Citação::
Verifique se o conteúdo do campo é realmente numérico...
KERP nao estava em numero no access, estava em texto sou uma anta !
Mas agora apresenta o seguinte erro:
Failed to convert parameter value from a String to a Int32.
ja usei Int32.Parse(txtbox.Text); e continua
Citação::
Que valor tem no txtbox? Só se pode converter para número o que for número...
KERP... Eu mudei direto na tabela oq tava TEXTO para numero, n preciso importar novamente o banco de dados?
Pq para importar usei no menu DATA > Add New DataSource (no visual studio).
èq os números estão numa maskedtextbox, consequentemente tem caracteres juntos, sera este o problema? Se for n tem como usar maskedbox? talvez se eu criar maskara no access tbm ?
Mudei os campos da tabela para TEXTO e o codigo deixei \/ e da Erro de sintaxe na instrução INSERT INTO
Citação:OleDbConnection Con = new OleDbConnection(Properties.Settings.Default.ConnectionString);
Con.Open();
OleDbCommand cmd = new OleDbCommand([Ô]INSERT INTO Cliente (Nome, Endereco, Telefone, CPF, RG[Ô] +
[Ô]CEP, Email) values (@Nome,@Endereco,@Telefone,@CPF,@RG,@CEP,@Email)[Ô], Con);
cmd.Parameters.Add([Ô]@Nome[Ô], OleDbType.VarChar).Value = txtNome.Text;
cmd.Parameters.Add([Ô]@Endereco[Ô], OleDbType.VarChar).Value = txtEndereco.Text;
cmd.Parameters.Add([Ô]@Telefone[Ô], OleDbType.VarNumeric).Value = masktxtTel.Text;
cmd.Parameters.Add([Ô]@CPF[Ô], OleDbType.VarChar).Value = masktxtCPF.Text;
cmd.Parameters.Add([Ô]@RG[Ô], OleDbType.VarChar).Value = masktxtRG.Text;
cmd.Parameters.Add([Ô]@CEP[Ô], OleDbType.VarChar).Value = masktxtCEP.Text;
cmd.Parameters.Add([Ô]@Email[Ô], OleDbType.VarChar).Value = txtEmail.Text;
cmd.ExecuteNonQuery();
Con.Close();
MessageBox.Show([Ô]Dados Adicionados com Sucesso ![Ô]);
Acerte a string
OleDbCommand cmd = new OleDbCommand([Ô]INSERT INTO Cliente ([Nome], [Endereco], [Telefone], [CPF], [RG][Ô] +
[Ô][CEP], [Email]) VALUES (@Nome,@Endereco,@Telefone,@CPF,@RG,@CEP,@Email)[Ô], Con);
para
OleDbCommand cmd = new OleDbCommand([Ô]INSERT INTO Cliente ([Nome], [Endereco], [Telefone], [CPF], [RG][txt-color=#e80000],[/txt-color] [Ô] +
[Ô][CEP], [Email]) VALUES (@Nome,@Endereco,@Telefone,@CPF,@RG,@CEP,@Email)[Ô], Con);
JSFF77
www.visualgria.com.br
Citação:OleDbConnection Con = new OleDbConnection(Properties.Settings.Default.ConnectionString);
Con.Open();
OleDbCommand cmd = new OleDbCommand([Ô]INSERT INTO Cliente ([Codigo],[Nome], [Endereco], [Telefone], [CPF], [RG],[Ô] +
[Ô][CEP], [Email]) values (@Codigo,@Nome,@Endereco,@Telefone,@CPF,@RG,@CEP,@Email)[Ô], Con);
cmd.Parameters.Add([Ô]@Nome[Ô], OleDbType.VarChar).Value = txtNome.Text;
cmd.Parameters.Add([Ô]@Endereco[Ô], OleDbType.VarChar).Value = txtEndereco.Text;
cmd.Parameters.Add([Ô]@Telefone[Ô], OleDbType.VarChar).Value = txtTelefone.Text;
cmd.Parameters.Add([Ô]@CPF[Ô], OleDbType.VarChar).Value = txtCPF.Text;
cmd.Parameters.Add([Ô]@RG[Ô], OleDbType.VarChar).Value = txtRG.Text;
cmd.Parameters.Add([Ô]@CEP[Ô], OleDbType.VarChar).Value = txtCEP.Text;
cmd.Parameters.Add([Ô]@Email[Ô], OleDbType.VarChar).Value = txtEmail.Text;
cmd.ExecuteNonQuery();
Con.Close();
MessageBox.Show([Ô]Dados Adicionados com Sucesso ![Ô]);
E diz : Colchetes inválidos no nome [ô][ RG][ô].
Citação::
Todas as textbox estão preenchidas? Caso uma delas não tenha valor, deve-se adicionar [Ô]DBNull.Value[Ô] como valor
Citação::
Todas as textbox estão preenchidas? Caso uma delas não tenha valor, deve-se adicionar [Ô]DBNull.Value[Ô] como valor
O campo ali encima [Codigo]-@Codigo é um auto-increment. Como q do valor null pra ele ale? ow oq eu faço cm ele ale ? ME falaram q é obrigatório por ele ali.
- Se não tiver, você precisa atribuir um valor para ele. Você pode fazer uma contagem ou selecionar o maior número nessa coluna nessa tabela e incrementar um(somar um) e usar esse valor na sua query de insert.
- Ainda tem a possibilidade de se fazer isso:
OleDbCommand cmd = new OleDbCommand([Ô]INSERT INTO Cliente ([Codigo],[Nome], [Endereco], [Telefone], [CPF], [RG],[Ô] +
[Ô][CEP], [Email]) values ((Select Max(Codigo) +1 From Cliente), @Nome,@Endereco,@Telefone,@CPF,@RG,@CEP,@Email)[Ô], Con);
cmd.Parameters.Add([Ô]@Endereco[Ô], OleDbType.VarChar).Value = txtEndereco.Text;
cmd.Parameters.Add([Ô]@Telefone[Ô], OleDbType.VarChar).Value = txtTelefone.Text;
cmd.Parameters.Add([Ô]@CPF[Ô], OleDbType.VarChar).Value = txtCPF.Text;
cmd.Parameters.Add([Ô]@RG[Ô], OleDbType.VarChar).Value = txtRG.Text;
cmd.Parameters.Add([Ô]@CEP[Ô], OleDbType.VarChar).Value = txtCEP.Text;
cmd.Parameters.Add([Ô]@Email[Ô], OleDbType.VarChar).Value = txtEmail.Text;