Usuário com melhor resposta
Tipo de dados incompatível na expressão de critério.

Pergunta
-
Gostaria de saber por que está me dando esse erro "Tipo de dados incompatível na expressão de critério".
Tenho o seguinte código:
String cmdSql, strMensagem;
try { if (statusStrip1.Text == "Incluão de Dados" )
{
cmdSql = "INSERT INTO Banco (CodigoBanco, NomeBanco) VALUES (" + txtCodigoBanco.Text + ",'" + txtNomeBanco.Text + "')" ;
strMensagem = " Banco inserido com sucesso!!!" ;
}
else { StringBuilder strQuery = new StringBuilder();
strQuery.Append(" UPDATE Banco " );
strQuery.Append(" SET " );
strQuery.Append(" NomeBanco = '" + txtNomeBanco.Text + "'" );
strQuery.Append(" WHERE " );
strQuery.Append(" CodigoBanco = " + codigo);
cmdSql = strQuery.ToString();
strMensagem = "Atualizado!!!" ;
}
OleDbConnection strConn = new OleDbConnection(Properties.Settings.Default.ControleFinanceiroConnectionString);
OleDbCommand cmd = new OleDbCommand(cmdSql, strConn);
strConn.Open();
cmd.ExecuteNonQuery();
strConn.Close();
MessageBox.Show(strMensagem);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Respostas
-
Olá,
Pode ser que o valor que você está passando para o CodigoBanco seja incompatível com o tipo do campo definido no banco de dados... Para evitar esse e outros tipos de problema, ao invés de ficar concatenando valores na sua consulta, utilize a funcionalidade de parâmetros do ADO.NET... Para maiores detalhes:
http://www.csharp-station.com/tutorials/adodotnet/lesson06.aspx
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Marcado como Resposta lsousa sexta-feira, 7 de janeiro de 2011 10:13
Todas as Respostas
-
Olá,
Pode ser que o valor que você está passando para o CodigoBanco seja incompatível com o tipo do campo definido no banco de dados... Para evitar esse e outros tipos de problema, ao invés de ficar concatenando valores na sua consulta, utilize a funcionalidade de parâmetros do ADO.NET... Para maiores detalhes:
http://www.csharp-station.com/tutorials/adodotnet/lesson06.aspx
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima- Marcado como Resposta lsousa sexta-feira, 7 de janeiro de 2011 10:13
-
Isousa,
Uma boa pratica é armazenar os valores a serem persistidos em objetos para isso crie uma classe de négocio, contendo os atributos e propriedades que serão utilizados.
Após isso como o Andre disse passe os valores por parametros.
Segue exemplo:
OleDbCommand command= new OleDbCommand(cmdSql, strConn);
command.CommandText = "INSERT INTO dbo.Clientes (Nome, Email, Telefone, Contato1, Contato2, Endereco, EnderecoNumero, EnderecoCep, EnderecoCidade, EnderecoEstado) values (@Nome, @Email, @Telefone, @Contato1, @Contato2, @Endereco, @EnderecoNumero, @EnderecoCep, @EnderecoCidade, @EnderecoEstado)";
command.Parameters.Add(new SqlParameter("@Nome", oCliente.Nome));
command.Parameters.Add(new SqlParameter("@Email", oCliente.Email));
command.Parameters.Add(new SqlParameter("@Telefone", oCliente.Telefone));
command.Parameters.Add(new SqlParameter("@Contato1", oCliente.Contato1));
command.Parameters.Add(new SqlParameter("@Contato2", oCliente.Contato2));
command.Parameters.Add(new SqlParameter("@Endereco", oCliente.Endereco));
command.Parameters.Add(new SqlParameter("@EnderecoNumero", oCliente.EnderecoNumero));
command.Parameters.Add(new SqlParameter("@EnderecoCep", oCliente.EnderecoCep));
command.Parameters.Add(new SqlParameter("@EnderecoCidade", oCliente.EnderecoCidade));
command.Parameters.Add(new SqlParameter("@EnderecoEstado", oCliente.EnderecoEstado));
oCliente seria instancia do objeto da classe de negocio que criei, contendo todos os atributos.
Abs
-
Problema resolvido. Eu me baseei neste tutorial:
http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson03.aspx
e o meu código ficou assim:
OleDbConnection strConn; private void InsereDados() { try { strConn = new OleDbConnection(Properties.Settings.Default.ControleFinanceiroConnectionString); strConn.Open(); String insereString = @"INSERT INTO Banco (CodigoBanco, NomeBanco) VALUES (" + txtCodigoBanco.Text + ",'" + txtNomeBanco.Text + "')"; OleDbCommand cmd = new OleDbCommand(insereString, strConn); cmd.ExecuteNonQuery(); } finally { if (strConn != null) { strConn.Close(); } } } private void AtualizaDados() { try { strConn = new OleDbConnection(Properties.Settings.Default.ControleFinanceiroConnectionString); strConn.Open(); String atualizaString = @" UPDATE Banco SET NomeBanco = '" + txtNomeBanco.Text + "' WHERE CodigoBanco = '" + txtCodigoBanco.Text + "'"; OleDbCommand cmd = new OleDbCommand(atualizaString); cmd.Connection = strConn; cmd.ExecuteNonQuery(); } finally { if (strConn != null) { strConn.Close(); } } }<br/> <br/> <pre lang="x-c#"> private void btnSalvar_Click(object sender, EventArgs e) { String strMensagem; try { if (statusStrip1.Text == "Incluão de Dados") { InsereDados(); strMensagem = "Banco inserido com sucesso!!!"; } else { AtualizaDados(); strMensagem = "Atualizado!!!"; } MessageBox.Show(strMensagem); } catch (Exception ex) { MessageBox.Show(ex.Message); } }