Usuário com melhor resposta
Como fazer um LIKE em C# ?

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
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.
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
Todas as Respostas
-
olá,
Você vai usar o evento keyDown no textbox
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.
-
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
-
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(); }
-
olá,
Você vai usar o evento keyDown no textbox
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(); }
-
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.
-
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.
-
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.
-
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.
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
-
-
-
-