none
Como fazer um LIKE em C# ? RRS feed

  • Pergunta

  • Olá amigos, boa noite a todos !

    Então, estou quebrando a cabeça para conseguir efetuar um like SQL via c#. 

    O que eu quero é o seguinte, que conforme seja digitado as letras nesse textbox abaixo de "Pesquisar por Like",  em tempo real seja preenchido o resultado da pesquisa nos outros campos. O filtro seria pelo nome mas se possível gostaria que retornasse todos os campos do registro e não apenas o nome. Já pesquisei bastante mas não ainda não consegui.

    Será que vocês podem me ajudar ?

    Abaixo a estrutura da tabela do banco de dados

    Muito Obrigado !


    • Editado diego.lk segunda-feira, 31 de dezembro de 2018 15:26 Resolvido
    quinta-feira, 27 de dezembro de 2018 05:35

Respostas

  • Coloque na variável Sql este seguinte comando: 

    string sql= "Select * from Cliente where Nome Like '%" + textBox1.Text + "%'"

    Assim quando você buscar os dados por exemplo você digita no campo a letra M ela vai buscar todos os dados que tem a letra M.

    Agora caso você coloca esse comando

    string sql= "Select * from Cliente where Nome Like '" + textBox1.Text + "%'"

    e você digita no campo a letra M por exemplo ela vai buscar todos os dados que começa com a letra M.

    No entanto caso você coloca esse comando

    string sql= "Select * from Cliente where Nome Like '%" + textBox1.Text + "'"

    e você digita no campo a letra M por exemplo ela vai buscar todos os dados que termina pela letra M.

    Dá uma pesquisada neste link: https://www.w3schools.com/sql/sql_like.asp

    se caso este post te ajudou a resolver o seu problem, proponha este post como resposta

    Vou compartilhar o link do vídeo que postei no youtube. Sei que você já conseguiu, mas pode te ajudar, caso necessite.

    https://youtu.be/gCWlUoGkG9Y



    Obrigado por toda a ajuda, amigo. Consegui com o seguinte código abaixo:

    string _sql = "Select * from Cliente where nome like '" + textBox1.Text + "%' or nome like '%" + textBox1.Text + "%'";
    

    Coloquei 2 LIKE's em um select, da forma acima, e funcionou.

    • Marcado como Resposta diego.lk domingo, 30 de dezembro de 2018 01:18
    domingo, 30 de dezembro de 2018 01:18

Todas as Respostas

  • olá,

    Você vai usar o evento keyDown no textbox

    https://docs.microsoft.com/pt-br/dotnet/api/system.windows.forms.control.keypress?view=netframework-4.7.2

    dentro desse método(evento) você faz sua sql usando o like. Porém um resultado pode trazer vários clientes e seu formulário só aceita um cliente.

    Ai terá que ver como vai selecionar qual registro que vai para os formulários, se é o primeiro ou não, porque pode ter vários clientes como mesmo nome.

    quinta-feira, 27 de dezembro de 2018 10:39
    Moderador
  • Incrementando a resposta do colega, abaixo você pode fazer o seguinte

    Caso você for buscar por id, você pode fazer o seguite:

    SqlConnection conexao = new SqlConnection(stringConn);
    			conexao.Open();        
    			try{  string _sql = "Select from Cliente where id_cliente like '" + txtId.Text + "%'";   
    			SqlDataAdapter comando = new SqlDataAdapter(_sql, conexao);  
    			comando.SelectCommand.CommandText = _sql;
    			DataTable Tabela = new DataTable();
    			comando.Fill(Tabela);  
    			if(tabela.Rows.Count > 0)           
    			{             			 
    			txtId.Text = tabela.Rows[0]["id_cliente"].ToString();
    			txtNome.Text = tabela.Rows[0]["nome_cliente"].ToString();     
    			txtEndereco.Text = tabela.Rows[0]["endereco_cliente"].ToString();               
    			txtTelefone.Text = tabela.Rows[0]["telefone_cliente"].ToString();               
    			txtCep.Text = tabela.Rows[0]["cep_cliente"].ToString();               
    			txtBairro.Text = tabela.Rows[0]"[bairro_cliente"].ToString();               
    			txtCidade.Text = tabela.Rows[0]["cidade_cliente"].ToString();               
    			txtUf.Text= tabela.Rows[0]["uf_cliente"].ToString();         
    			}           
    			}
    			cath
    			{
    			     throw;
    			}
    			finally
    			{
    			     conexao.Close();
    			}


    • Editado Jô Alves quinta-feira, 27 de dezembro de 2018 16:39
    quinta-feira, 27 de dezembro de 2018 16:00
  • Incrementando a resposta do colega, abaixo você pode fazer o seguinte

    Caso você for buscar por id, você pode fazer o seguite:

    SqlConnection conexao = new SqlConnection(stringConn);
    			conexao.Open();        
    			try{  string _sql = "Select from Cliente where id_cliente like '" + txtId.Text + "%'";   
    			SqlDataAdapter comando = new SqlDataAdapter(_sql, conexao);  
    			comando.SelectCommand.CommandText = _sql;
    			DataTable Tabela = new DataTable();
    			comando.Fill(Tabela);  
    			if(tabela.Rows.Count > 0)           
    			{             			 
    			txtId.Text = tabela.Rows[0]["id_cliente"].ToString();
    			txtNome.Text = tabela.Rows[0]["nome_cliente"].ToString();     
    			txtEndereco.Text = tabela.Rows[0]["endereco_cliente"].ToString();               
    			txtTelefone.Text = tabela.Rows[0]["telefone_cliente"].ToString();               
    			txtCep.Text = tabela.Rows[0]["cep_cliente"].ToString();               
    			txtBairro.Text = tabela.Rows[0]"[bairro_cliente"].ToString();               
    			txtCidade.Text = tabela.Rows[0]["cidade_cliente"].ToString();               
    			txtUf.Text= tabela.Rows[0]["uf_cliente"].ToString();         
    			}           
    			}
    			cath
    			{
    			     throw;
    			}
    			finally
    			{
    			     conexao.Close();
    			}


    Obrigado por responder. O código que você sugeriu chegou a funcionar, porém não da maneira que eu quero.

    Adaptei o seu código ao meu e ficou como mostrado abaixo, executo o programa começo a digitar no textbox configurado para receber o LIKE, porém a pesquisa só tem retorno a partir da segunda letra digitada e não já na primeira letra. Por exemplo, ao pesquisar pelo nome FERNANDO, eu preciso digitar FE para aparecer o registro correspondente, invés de somente F. Outra coisa que gostaria de fazer, é que ao ir pressionando backspace e apagando o nome, os dados preenchidos sofressem uma limpeza nos devidos campos. Como faço para resolver essas questões ? De qualquer forma, agradeço muito pelo seu tempo e ajuda.

    SqlConnection conexao = new SqlConnection(connectionString);
                conexao.Open();
                try
                {
                    string _sql = "Select * from Cliente where nome like '" + textBox1.Text + "%'";
                    SqlDataAdapter comando = new SqlDataAdapter(_sql, conexao);
                    comando.SelectCommand.CommandText = _sql;
                    DataTable Tabela = new DataTable();
                    comando.Fill(Tabela);
                    if (Tabela.Rows.Count > 0)
                    {
                        txtId.Text = Tabela.Rows[0]["id"].ToString();
                        txtNome.Text = Tabela.Rows[0]["nome"].ToString();
                        txtEndereco.Text = Tabela.Rows[0]["endereco"].ToString();
                        mskCep.Text = Tabela.Rows[0]["cep"].ToString();
                        txtBairro.Text = Tabela.Rows[0]["bairro"].ToString();
                        txtCidade.Text = Tabela.Rows[0]["cidade"].ToString();
                        txtUf.Text = Tabela.Rows[0]["uf"].ToString();
                        mskTelefone.Text = Tabela.Rows[0]["telefone"].ToString();
                    }
                }
    
                catch
    
                {
                    throw;
                }
    
                finally
                {
                    conexao.Close();
                }

    sexta-feira, 28 de dezembro de 2018 01:23
  • olá,

    Você vai usar o evento keyDown no textbox

    https://docs.microsoft.com/pt-br/dotnet/api/system.windows.forms.control.keypress?view=netframework-4.7.2

    dentro desse método(evento) você faz sua sql usando o like. Porém um resultado pode trazer vários clientes e seu formulário só aceita um cliente.

    Ai terá que ver como vai selecionar qual registro que vai para os formulários, se é o primeiro ou não, porque pode ter vários clientes como mesmo nome.

    Primeiramente, muito obrigado por me ajudar. Criei o seguinte código abaixo, dentro do evento sugerido por você. E de fato funcionou, porém com algumas ressalvas conforme explicado para o outro amigo que respondeu aqui.

    "Quando executo o programa começo a digitar no textbox configurado para receber o LIKE, porém a pesquisa só tem retorno a partir da segunda letra digitada e não já na primeira letra. Por exemplo, ao pesquisar pelo nome FERNANDO, eu preciso digitar FE para aparecer o registro correspondente, invés de somente F. Outra coisa que gostaria de fazer, é que ao ir pressionando backspace e apagando o nome, os dados preenchidos sofressem uma limpeza nos devidos campos. Como faço para resolver essas questões ? De qualquer forma, agradeço muito pelo seu tempo e ajuda."

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                string sql = "Select * from Cliente where Nome Like '" + textBox1.Text + "%'";
                SqlConnection con = new SqlConnection(connectionString);
                SqlCommand cmd = new SqlCommand(sql, con);
                cmd.Parameters.AddWithValue("@Nome", textBox1.Text);
                cmd.CommandType = CommandType.Text;
                SqlDataReader reader;
                con.Open();
    
                try
                {
                    reader = cmd.ExecuteReader();
                    if (reader.Read())
                    {
                        tsbNovo.Enabled = false;
                        tsbSalvar.Enabled = true;
                        tsbCancelar.Enabled = true;
                        tsbExcluir.Enabled = true;
                        tstId.Enabled = false;
                        tsbBuscar.Enabled = false;
                        txtNome.Enabled = true;
                        txtEndereco.Enabled = true;
                        mskCep.Enabled = true;
                        txtBairro.Enabled = true;
                        txtCidade.Enabled = true;
                        txtUf.Enabled = true;
                        mskTelefone.Enabled = true;
                        // txtNome.Focus();
                        txtId.Text = reader[0].ToString();
                        txtNome.Text = reader[1].ToString();
                       txtEndereco.Text = reader[2].ToString();
                        mskCep.Text = reader[3].ToString();
                        txtBairro.Text = reader[4].ToString();
                        txtCidade.Text = reader[5].ToString();
                        txtUf.Text = reader[6].ToString();
                       mskTelefone.Text = reader[7].ToString();
                        novo = false;
                    }
                    else
                        MessageBox.Show("Nenhum registro encontrado com o Id informado!");
    
    
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro: " + ex.ToString());
                }
                finally
                {
                    con.Close();
                }
    

    sexta-feira, 28 de dezembro de 2018 01:29
  • Adapte esse código no evento TextChanged. Só que eu acho que a melhor maneira de você fazer, seria criar um botão  debusca, e este botão Abre uma janela, nesta janela você coloca o Campo de texto e um DataGridView, o datagridView busca os dados do banco e ao você clicar em alguma linha esse dados irão ser inseridos nos campos da Janela Pai. Mais Tarde vou postar um vídeo mostrando como você pode fazer isso.
    sábado, 29 de dezembro de 2018 13:56
  • Adapte esse código no evento TextChanged. Só que eu acho que a melhor maneira de você fazer, seria criar um botão  debusca, e este botão Abre uma janela, nesta janela você coloca o Campo de texto e um DataGridView, o datagridView busca os dados do banco e ao você clicar em alguma linha esse dados irão ser inseridos nos campos da Janela Pai. Mais Tarde vou postar um vídeo mostrando como você pode fazer isso.

    Ia te responder ontem, mas acabei ficando sem tempo. Consegui fazer do modo que queria, mudei o evento de KeyDown para TextChanged e funcionou. eu conheço o datagridview mas eu queria mesmo saber se tinha como fazer por textbox. Agora eu vou digitando as letras e simultaneamente os campos vão sendo preenchidos, mas só se digitar o nome da pessoa na ordem. por exemplo, ao buscar por Ana Maria, eu preciso digitar o nome na ordem (Ana e etc), se eu digitar Maria não retorna nada. como posso resolver isso ?

    Obrigado por toda ajuda.

    sábado, 29 de dezembro de 2018 16:09
  • Coloque na variável Sql este seguinte comando: 

    string sql= "Select * from Cliente where Nome Like '%" + textBox1.Text + "%'"

    Assim quando você buscar os dados por exemplo você digita no campo a letra M ela vai buscar todos os dados que tem a letra M.

    Agora caso você coloca esse comando

    string sql= "Select * from Cliente where Nome Like '" + textBox1.Text + "%'"

    e você digita no campo a letra M por exemplo ela vai buscar todos os dados que começa com a letra M.

    No entanto caso você coloca esse comando

    string sql= "Select * from Cliente where Nome Like '%" + textBox1.Text + "'"

    e você digita no campo a letra M por exemplo ela vai buscar todos os dados que termina pela letra M.

    Dá uma pesquisada neste link: https://www.w3schools.com/sql/sql_like.asp

    se caso este post te ajudou a resolver o seu problem, proponha este post como resposta

    Vou compartilhar o link do vídeo que postei no youtube. Sei que você já conseguiu, mas pode te ajudar, caso necessite.

    https://youtu.be/gCWlUoGkG9Y



    • Editado Jô Alves sábado, 29 de dezembro de 2018 19:00
    • Sugerido como Resposta Jô Alves domingo, 30 de dezembro de 2018 12:16
    • Não Sugerido como Resposta Jô Alves segunda-feira, 31 de dezembro de 2018 11:26
    • Sugerido como Resposta Jô Alves segunda-feira, 31 de dezembro de 2018 11:26
    sábado, 29 de dezembro de 2018 18:21
  • Coloque na variável Sql este seguinte comando: 

    string sql= "Select * from Cliente where Nome Like '%" + textBox1.Text + "%'"

    Assim quando você buscar os dados por exemplo você digita no campo a letra M ela vai buscar todos os dados que tem a letra M.

    Agora caso você coloca esse comando

    string sql= "Select * from Cliente where Nome Like '" + textBox1.Text + "%'"

    e você digita no campo a letra M por exemplo ela vai buscar todos os dados que começa com a letra M.

    No entanto caso você coloca esse comando

    string sql= "Select * from Cliente where Nome Like '%" + textBox1.Text + "'"

    e você digita no campo a letra M por exemplo ela vai buscar todos os dados que termina pela letra M.

    Dá uma pesquisada neste link: https://www.w3schools.com/sql/sql_like.asp

    se caso este post te ajudou a resolver o seu problem, proponha este post como resposta

    Vou compartilhar o link do vídeo que postei no youtube. Sei que você já conseguiu, mas pode te ajudar, caso necessite.

    https://youtu.be/gCWlUoGkG9Y



    Obrigado por toda a ajuda, amigo. Consegui com o seguinte código abaixo:

    string _sql = "Select * from Cliente where nome like '" + textBox1.Text + "%' or nome like '%" + textBox1.Text + "%'";
    

    Coloquei 2 LIKE's em um select, da forma acima, e funcionou.

    • Marcado como Resposta diego.lk domingo, 30 de dezembro de 2018 01:18
    domingo, 30 de dezembro de 2018 01:18
  • Uma última dúvida, como faço para mudar o post para resolvido ?
    domingo, 30 de dezembro de 2018 21:31
  •  É só você ir no post que te ajudou e clicar na opção votar. Você estará dizendo que a resposta foi útil. e também clicar em propor como resposta
    • Editado Jô Alves segunda-feira, 31 de dezembro de 2018 11:26
    segunda-feira, 31 de dezembro de 2018 11:24
  • Obrigado por toda ajuda. Ótimo 2019 para você !
    segunda-feira, 31 de dezembro de 2018 15:21
  • Parabéns me ajudou em 2022 , Obrigado !
    sexta-feira, 21 de janeiro de 2022 02:29