ERRO INSERT ACCESS C#

GHALEON 22/06/2012 16:43:55
#404705
Fala galerinha do vbmania tudo beleza?
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.
KERPLUNK 22/06/2012 17:27:23
#404711
Verifique se o conteúdo do campo é realmente numérico...
GHALEON 22/06/2012 17:37:47
#404714
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
KERPLUNK 22/06/2012 17:42:49
#404715
Que valor tem no txtbox? Só se pode converter para número o que for número...
GHALEON 22/06/2012 17:44:50
#404716
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 ![Ô]);

KERPLUNK 22/06/2012 18:10:33
#404718
Bem, eu não sei dizer de cabeça, mas é possível que o maskedit tenha alguma propriedade que diga o texto digitado sem a máscara. Então o que você poderia fazer é um método estático que verifica esse valor se é número e retorna já convertido.
JSFF77 22/06/2012 18:19:15
#404720
Boa noite.

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
GHALEON 22/06/2012 18:23:22
#404721
Mudei para
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][ô].
KERPLUNK 22/06/2012 18:33:22
#404722
Todas as textbox estão preenchidas? Caso uma delas não tenha valor, deve-se adicionar [Ô]DBNull.Value[Ô] como valor
GHALEON 22/06/2012 18:40:33
#404723
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.
KERPLUNK 22/06/2012 18:47:13
#404724
- Se no banco de dados, esse campo tiver um valor default ou for auto-incrementado, não precisa ser incluído no insert
- 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;
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas