none
Tipo de dados incompatível na expressão de critério. RRS feed

  • 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);
    }

     

     

     

    quinta-feira, 6 de janeiro de 2011 16:01

Respostas

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
    quinta-feira, 6 de janeiro de 2011 17:10
    Moderador
  • 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

    quinta-feira, 6 de janeiro de 2011 20:07
  • 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);
          }
        }
    

     

    sexta-feira, 7 de janeiro de 2011 10:28