Jump to content

Problema ao Inserir dados


D3POD

Recommended Posts

Boa tarde pessoal, tenho aqui uma duvida...

public void guarda()
{
string nome = txt_nome.Text;
int telefone = int.Parse(mtb_telf.Text);
int telemovel = int.Parse(mtb_tele.Text);
string morada = txt_morada.Text;
int contribuinte = int.Parse(mtb_contr.Text);
string email = txt_email.Text;
string licenca = mtb_serie.Text;
string activacao = mtb_activacao.Text;
string conn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Clientes.accdb;Persist Security Info=False";
OleDbConnection con = new OleDbConnection(conn);

string bd = @" insert into Clientes (Nome, Telefone, Telemovel, Morada, Contribuinte, Email, Licenca, Activacao) values
(nome, telefone, telemovel, morada, contribuinte, email, licenca, activacao)";
OleDbCommand cmd = new OleDbCommand(bd, conn);
cmd.ExecuteNonQuery();
 
}

Acontece que na linha ...

OleDbCommand cmd = new OleDbCommand(bd, conn);

Existe um erro ao declarar a bd...

se retirar já não aparece erro nenhum...

O que está de mal no código, alguém me consegue dar um hel? 😛

Muito obrigado desde já 😉

Link to comment
Share on other sites

Ora cá estou eu de novo 😛

Já terminei o código que ficou assim:

public void guarda()
{


OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Clientes.accdb;Persist Security Info=False");



string query = "INSERT INTO Clientes ([Nome], [Telefone], [Telemovel], [Morada], [Contribuinte], [Email], [Licenca], [Activacao] VALUE (@nome, @telefone, @telemovel, @morada, @contribuinte, @email, @licenca, @activacao)";

OleDbCommand cmd = new OleDbCommand (query, conn);


cmd.Parameters.Add ( "@nome", OleDbType.VarChar).Value = txt_nome.Text;
cmd.Parameters.Add ( "@telefone", OleDbType.VarChar).Value = mtb_telf.Text;
cmd.Parameters.Add ( "@telemovel", OleDbType.VarChar).Value = mtb_tele.Text;
cmd.Parameters.Add ( "@morada", OleDbType.VarChar).Value = txt_morada.Text;
cmd.Parameters.Add ( "@contribuinte", OleDbType.VarChar).Value = mtb_contr.Text;
cmd.Parameters.Add ( "@email", OleDbType.VarChar).Value = txt_email.Text;
cmd.Parameters.Add ( "@licenca", OleDbType.VarChar).Value = mtb_serie.Text;
cmd.Parameters.Add ( "@activacao", OleDbType.VarChar).Value = mtb_activacao.Text;


conn.Open();
int x = cmd.ExecuteNonQuery();


if (x < 1)
{
MessageBox.Show(" Erro ao Inserir os Dados", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Dados Inseridos com Sucesso", "Actualização Efectuada", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
conn.Close();
cmd = null;
}

Agora quando faço a operação de inserir retorna-me um erro:

OleDbException não foi manipulada

Erro de sintaxe na instrução INSERT INTO.

Será que tenho que iniciar um comando try/catch?

E aparece a amarelo a seguinte expressão:

int x = cmd.ExecuteNonQuery();

Como estou a passar apenas uma aplicação já feita em VB.NET fui ver o código e lá tinha colocado nas expressões que poderiam estar vazias o seguinte:

command.Parameters.Add("@contacto2", OleDbType.Integer).Value = IIf(tel2txt.Text.Equals(String.Empty), DBNull.Value, tel2txt.Text)

Mas neste caso estou a preencher tudo...

Qual será o problema?

Um abraço

Link to comment
Share on other sites

Boa tarde, realmente não é tudo texto...

Aqui está o código correcto:

// Caminho BD
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Clientes.accdb;Persist Security Info=False");

// String das colunas que serão editatadas, neste caso que irão receber dados
string query = "INSERT INTO Clientes ([Nome], [Telefone], [Telemovel], [Morada], [Contribuinte], [Email], [Licenca], [Activacao] VALUES (@nome, @telefone, @telemovel, @morada, @contribuinte, @email, @licenca, @activacao)";


// Comando que faz a conexão
OleDbCommand cmd = new OleDbCommand (query, conn);


// Comando que define o que vai ser introduzido e em que parte da BD
cmd.Parameters.Add ( "@nome", OleDbType.VarChar).Value = txt_nome.Text;
cmd.Parameters.Add ( "@telefone", OleDbType.Integer).Value = mtb_telf.Text;
cmd.Parameters.Add ( "@telemovel", OleDbType.Integer).Value = mtb_tele.Text;
cmd.Parameters.Add ( "@morada", OleDbType.VarChar).Value = txt_morada.Text;
cmd.Parameters.Add ( "@contribuinte", OleDbType.Integer).Value = mtb_contr.Text;
cmd.Parameters.Add ( "@email", OleDbType.VarChar).Value = txt_email.Text;
cmd.Parameters.Add ( "@licenca", OleDbType.Integer).Value = mtb_serie.Text;
cmd.Parameters.Add ( "@activacao", OleDbType.Integer).Value = mtb_activacao.Text;
//Abertura da Conexão
conn.Open();
int x = cmd.ExecuteNonQuery();
// String para verificação dos dados
if (x < 1)
{
MessageBox.Show(" Erro ao Inserir os Dados", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show("Dados Inseridos com Sucesso", "Actualização Efectuada", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
conn.Close();
cmd = null;
}

Assim é o correcto, mas o erro continua o mesmo... 😉

Link to comment
Share on other sites

Então mas faltam-te parênteses na query.

string query = "INSERT INTO Clientes ([Nome], [Telefone], [Telemovel], [Morada], [Contribuinte], [Email], [Licenca], [Activacao] VALUES (@nome, @telefone, @telemovel, @morada, @contribuinte, @email, @licenca, @activacao)";

deveria ser

string query = "INSERT INTO Clientes ([Nome], [Telefone], [Telemovel], [Morada], [Contribuinte], [Email], [Licenca], [Activacao]) VALUES (@nome, @telefone, @telemovel, @morada, @contribuinte, @email, @licenca, @activacao)";
Link to comment
Share on other sites

Boas, basicamente crio um metodo como está descrito e depois chamo o método... 😉

Muito obrigado 🙂

Agora não estou a perceber uma parte do tutorial:

if (result)
  {
	 Console.WriteLine("Converted '{0}' to {1}.", value, number);		
  }
  else
  {
	 if (value == null) value = "";
	 Console.WriteLine("Attempted conversion of '{0}' failed.", value);

Basicamente, não percebo o que está a negrito 😞

Ele vai indicar na tela a conversão de value para number... mas isto em linha de comandos...

não estou a ver é como tirar partido disto para windows form...

Ver se me consigo explicar melhor...

Então vou criar o metodo... este retorna se for true a conversão... mas onde posso ir buscar esse retorno para o usar depois no botão guardar?

Ou estou a fazer uma grande confusão?

Desculpem estar a perguntar sem testar, mas só mais para a noite é que estou por casa e assim retiro já as dúvidas 😉

Link to comment
Share on other sites

Boas, vou tentar explicar o que já tentei 😛

Procurei no google e no msdn e encontrei muita coisa...

mas achei a explicação de como converter string em inteiros...

ora o tutorial é igual ao do link e também em console application...

O que me lembrei foi... então a diferença é apenas no Int... que deve ser Int32... e coloquei assim:

cmd.Parameters.Add ( "@nome", OleDbType.VarChar).Value = txt_nome.Text;

cmd.Parameters.Add("@telefone", OleDbType.Integer).Value = Int32.Parse(mtb_telf.Text);

cmd.Parameters.Add ( "@telemovel", OleDbType.Integer).Value = Int32.Parse(mtb_tele.Text);

cmd.Parameters.Add ( "@morada", OleDbType.VarChar).Value = txt_morada.Text;

cmd.Parameters.Add ( "@contribuinte", OleDbType.Integer).Value = mtb_contr.Text;

cmd.Parameters.Add ( "@email", OleDbType.VarChar).Value = txt_email.Text;

cmd.Parameters.Add ( "@licenca", OleDbType.Integer).Value = Int32.Parse(mtb_serie.Text);

cmd.Parameters.Add ( "@activacao", OleDbType.Integer).Value = Int32.Parse(mtb_activacao.Text);

só fiz esta alteração e o erro vem assim:

Cadeia de caracteres de entrada com formato incorrecto

Agora achei interessante outra coisa que poderá ser o erro:

Ao converter uma cadeia de caracteres para DataTime, analise essa cadeia para obter a data antes de aplicar cada variável ao objeto DataTime.

DataTime? Foi aqui que fiquei confuso...

Eu estou a usar maskedtextbox... onde formatei para colocar o numero de telefone xxx xxx xxx e o contribuinte xxx xxx xxxx

Poderá o erro ter a ver com alguma coisa com a maskedtextbox?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.