locked
Consulta SQL utilizando LIKE no C# RRS feed

  • Pergunta

  • Olá Pessoal!

     

    Como seria a sintaxe para realizar uma consulta no C# utilizando o LIKE do SQL?

     

    O banco de dados utilizado é o MySql

     

    esta é a sintaxe utilizada e não retorna nada!

     

    String sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE '%@nomeRespDpto%' ORDER BY idTramite";

     

    estou utilizando dessa forma:

     

    Tramite p = new Tramite();

    p.nomeRespDpto = "%" + (String)textbox.text + "%";

     

    String sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE @nomeRespDpto ORDER BY idTramite";

     

    ...

    ...

    ...

     

    con = new MySqlConnection(_conexaoMySQL);

     

    MySqlCommand cmd = new MySqlCommand(sql, con);

    cmd.Parameters.Add("@nomeRespDpto", tramite.NomeRespDpto);

     

    ...

     

    String sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE @nomeRespDpto  ORDER BY idTramite";

    sábado, 2 de outubro de 2010 00:08

Respostas

  • Sérgio,

    Está faltando as aspas no like, veja:

    p.nomeRespDpto = "'%" + (String)textbox.text + "%'";

    []s,


    Carlos dos Santos - www.carloscds.net
    sábado, 2 de outubro de 2010 00:23
  •  

               //Dessa forma funciona, mas, creio que não seja a forma correta.

               p.NomeRespDpto = “%” + (String)textBox1.Text + “%”;

     Esta correcto, podes usar.

    Nao vejo nenhum erro nisto.


    Just Be Humble Malange!
    • Marcado como Resposta Sérgio Pitta sexta-feira, 5 de novembro de 2010 20:13
    domingo, 31 de outubro de 2010 14:50
    Moderador

Todas as Respostas

  • tente "SELECT * FROM tramite WHERE nomeRespDpto LIKE nomeRespDpto = '"+ Variavel +"' ORDER BY idTramite"
    sábado, 2 de outubro de 2010 00:12
  • Sérgio,

    Está faltando as aspas no like, veja:

    p.nomeRespDpto = "'%" + (String)textbox.text + "%'";

    []s,


    Carlos dos Santos - www.carloscds.net
    sábado, 2 de outubro de 2010 00:23
  • Olá Palini!

    Não estou trabalhando com variável!

    Estou utilizando métodos e três camadas (DAL > BLL > UI).

    sábado, 2 de outubro de 2010 00:35
  •                  comando.CommandText = "SELECT * FROM Table_Copy WHERE FirstName = @FirstName";

     

                    comando.CommandText = "Select * FROM Table_Copy Where LastName Like @FirstName + '%'";


    Just Be Humble Malange!
    sábado, 2 de outubro de 2010 00:37
    Moderador
  • Olá Malange!

    não deu certo!

    String

     

    sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE @nomeRespDpto + '%'";

    sábado, 2 de outubro de 2010 00:45
  • Olá Malange!

    não deu certo!

    String

     

    sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE @nomeRespDpto + '%'";

    Desculpa:

     System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand
    ("SELECT * FROM Table_Copy Where FirstName Like '%' + @my_Param + '%' ", con);

                command.Parameters.AddWithValue("@my_Param", textBox1.Text.ToString());

    Just Be Humble Malange!
    sábado, 2 de outubro de 2010 00:50
    Moderador
  • Ah... na verdade os % deve ir na definição do valor do paramentro...

     System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand
    ("SELECT * FROM Table_Copy Where FirstName Like @my_Param", con);

                command.Parameters.AddWithValue("@my_Param", "%" +  textBox1.Text + "%");


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    sábado, 2 de outubro de 2010 01:17
    Moderador
  • Ah... na verdade os % deve ir na definição do valor do paramentro...

     

    Onde Foi que leste isto, Rui?

    Obrigado?


    Just Be Humble Malange!
    sábado, 2 de outubro de 2010 11:41
    Moderador
  • Malange,

     

    Veja a forma que estou conseguindo filtrar o campo utilizando o LIKE do SQL. Creio que dessa forma não seja o ideal, sei que posso fazer essa sintaxe diratamente na instrução SQL. Mas, não estou conseguindo ter exito. Já fiz todas as formas mencionadas neste tópico do fórum e nenhuma delas retornou o esperado.

     

    Estou utilizando o processo de três camadas (UI > BLL > DAL).

     

    User Interface – UI:

     

    using BLL;

    using DTO;

     

    namespace DataGrid_ShowIMG_PictureBox

    {

            . . .

            private void btnExibir_Click(object sender, EventArgs e)

            {

                Tramite p = new Tramite();

                //p.NomeRespDpto = (String)textBox1.Text;

              

               //Dessa forma funciona, mas, creio que não seja a forma correta.

               p.NomeRespDpto = “%” + (String)textBox1.Text + “%”;

     

                try

                {

                    BLL.tramiteBLL bll = new tramiteBLL();

                    dataGridView1.DataSource = bll.selecionaTramite(p);

                }

                catch (Exception ex)

                {

                    MessageBox.Show(" Erro : " + ex.Message.ToString());

                }

            }

    }

     

    Business Logical Layer – BLL:

     

    using DAL;

    using DTO;

     

    namespace BLL

    {

            public DataTable selecionaTramite(Tramite tramite)

            {

                DataTable tb = new DataTable();

     

                try

                {

                    dal = new DAL.MySqlDAL();

                    tb = dal.selectTramite(tramite);

                    return tb;

                }

                catch (Exception ex)

                {

                    throw ex;

                }

            }

    }

     

    Data Acess Layer – DAL

     

    using MySql.Data.MySqlClient;

    using DTO;

     

    namespace DAL

    {

           . . .

           public DataTable selectTramite(Tramite tramite)

            {

                try

                {

                    String sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE @nomeRespDpto ORDER BY idTramite";

     

                    con = new MySqlConnection(_conexaoMySQL);

                    MySqlCommand cmd = new MySqlCommand(sql, con);

                    cmd.Parameters.Add("@nomeRespDpto", tramite.NomeRespDpto);

                    MySqlDataAdapter da = new MySqlDataAdapter();

                    da.SelectCommand = cmd;

                    DataTable dt = new DataTable();

                    da.Fill(dt);

                    return dt;

                }

                catch (Exception ex)

                {

                    throw ex;

                }

            }

    }

     

    Classe – Tramite

     

    using System;

     

    namespace DTO //Data Transfer Object ou Transferência de Dados de Objeto

    {

        public class Tramite

        {

            private int _idTramite;

            . . .

            private string _nomeRespDpto;

            . . .

     

            public int IdTramite

            {

                get { return _idTramite; }

                set { _idTramite = value; }

            }

            . . .

            public string NomeRespDpto

            {

                get { return _nomeRespDpto; }

                set { _nomeRespDpto = value; }

            }

            . . .

        }

    }

    Sds,

    sábado, 2 de outubro de 2010 12:37
  • Ah... na verdade os % deve ir na definição do valor do paramentro...

     

    Onde Foi que leste isto, Rui?

    Obrigado?


    Just Be Humble Malange!

    Da forma que vc expoz so vai procurar por registros que sempre tenha o valor no meio da string... vc não pode por exemplo setar a variavel para achar apenas registros que terminam... ou iniciam com o valor...

    como "Teste%" ou só "%Teste" ou mesmo "AAAA%BBBB".... vai ser sempre "%AAAA%"... por isso se passa os % na definição do valor do paramentro....

     


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    sábado, 2 de outubro de 2010 16:27
    Moderador
  • @Rui

    Eu Quando quero Procurar "Nome" que Comecam com uma certa Letra, eu uso o codigo que eu postei. Ate agora este codigo retorna apenas "Nomes" que comecam com as letra escolhida pelo usuario.

    Eu testei o teu codigo, ele faz o oposito, procura "Nomes" que tem um tipo de letra. Este resultado e vago nao especifico. Pode ate mesmo retornar Toda base de dados....

    Acho que nao se aplica quando se pretende buscar um registo que a gente sabe "a letra" que inicia este registo.

    Por isso acho o teu metodo, pouco pratico. Mas obrigado, pela informacao.

    Nao gostei do resultado, touxe registos desnecessariso da minha base de dados:( 


    Just Be Humble Malange!
    sábado, 2 de outubro de 2010 21:44
    Moderador
  • Srs.,

    Novidades quanto a essa dúvida?


    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sexta-feira, 29 de outubro de 2010 23:09
    Moderador
  • String sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE '%@nomeRespDpto%' ORDER BY idTramite";
    sábado, 30 de outubro de 2010 23:48
  •  

               //Dessa forma funciona, mas, creio que não seja a forma correta.

               p.NomeRespDpto = “%” + (String)textBox1.Text + “%”;

     Esta correcto, podes usar.

    Nao vejo nenhum erro nisto.


    Just Be Humble Malange!
    • Marcado como Resposta Sérgio Pitta sexta-feira, 5 de novembro de 2010 20:13
    domingo, 31 de outubro de 2010 14:50
    Moderador
  • Eu utilizo desta maneira:

    Ao invés de colocar as % dentro da instrução sql eu coloco no valor mesmo, portanto eu uso assim e funciona muito bem, inclusive consultando por erro de digitação do usuário...

     

    ===

    String sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE @nomeRespDpto ORDER BY idTramite";

    con = new MySqlConnection(_conexaoMySQL); 

    MySqlCommand cmd = new MySqlCommand(sql, con);

    cmd.Parameters.Add("@nomeRespDpto", "%" + valor.Trim().Replace(" ", "%") + "%");

    ===

     

    Assim pego todos os que começam e contenha o texto.

     


    Henry Damasceno Desenvolvedor Know How Consultoria em T.I.
    segunda-feira, 13 de dezembro de 2010 16:51
  • Oi Henry,

    Vou testar, obrigado!

    abs,

     


    Sérgio Pitta
    segunda-feira, 13 de dezembro de 2010 21:14
  • Eu utilizo desta maneira:

    Ao invés de colocar as % dentro da instrução sql eu coloco no valor mesmo, portanto eu uso assim e funciona muito bem, inclusive consultando por erro de digitação do usuário...

     

    ===

     

    String sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE @nomeRespDpto ORDER BY idTramite";

    con = new MySqlConnection(_conexaoMySQL); 

    MySqlCommand cmd = new MySqlCommand(sql, con);

    cmd.Parameters.Add("@nomeRespDpto", "%" + valor.Trim().Replace(" ", "%") + "%");

    ===

     

     

    Assim pego todos os que começam e contenha o texto.

     


    Henry Damasceno Desenvolvedor Know How Consultoria em T.I.
    Ue... e não foi isso que eu disse acima ^^ ??? kkkk 
    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    segunda-feira, 13 de dezembro de 2010 23:56
    Moderador
  • Eu utilizo desta maneira:

    Ao invés de colocar as % dentro da instrução sql eu coloco no valor mesmo, portanto eu uso assim e funciona muito bem, inclusive consultando por erro de digitação do usuário...

     

    ===

     

    String sql = "SELECT * FROM tramite WHERE nomeRespDpto LIKE @nomeRespDpto ORDER BY idTramite";

    con = new MySqlConnection(_conexaoMySQL); 

    MySqlCommand cmd = new MySqlCommand(sql, con);

    cmd.Parameters.Add("@nomeRespDpto", "%" + valor.Trim().Replace(" ", "%") + "%");

    ===

     

     

    Assim pego todos os que começam e contenha o texto.

     


    Henry Damasceno Desenvolvedor Know How Consultoria em T.I.
    Ue... e não foi isso que eu disse acima ^^ ??? kkkk 
    Eu não sou pago para postar aqui... faço simplesmente porque eu quero....
    Óh Rui, não vi o seu post... risos...
    Henry Damasceno Desenvolvedor Know How Consultoria em T.I.
    terça-feira, 14 de dezembro de 2010 09:44