Array
(
)

Botão Pesquisar (alguém pode ajudar ?)

Vinicius Biá
   - 09 out 2013

Olá galera, estou a desenvolver uma aplicação em camadas, fiz o primeiro formulário que é o cadastro de clientes, está funcionando perfeitamente inclusão, alteração, deletando, porém estou enfrentando dificuldades no pesquisar, queria que quando o usuário fosse digitando um nome de um cliente, este fosse sendo filtrado automaticamente no Grid, alguém tem uma noção de como eu posso fazer isso ?
Desde já agradeço aos amigos do Fórum....

Joel Rodrigues
   - 09 out 2013

É só você fazer a pesquisa no evento TextChanged do TextBox de pesquisa, assim, sempre que o texto for alterado, a pesquisa será refeita.

Vinicius Biá
   - 09 out 2013

Então Joel, vou fazer sim da forma a qual você me referenciou....

Na camada de acesso aos dados estou com esse código aqui...... estaria correto ?

public void Pesquisar(Cliente cliente)
{
MySqlConnection con = new MySqlConnection();

try
{
con.ConnectionString = Dados.StringDeConexao;

con.Open();

MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;

cmd.CommandText = "SELECT cod_cliente,datacad_cliente,nasc_cliente,cnpjcpf_cliente,ierg_cliente,endereco_cliente,cep_cliente,bairro_cliente,cidade_cliente,uf_cliente,telfixo_cliente,telmovel_cliente,contato_cliente,email_cliente,website_cliente,extra_cliente,estadocivil_cliente,complementoend_cliente,orgaoexpedrg_cliente,dataexpedrg_cliente,empresa_cliente,empresaend_cliente,numendempresa_cliente,bairroempresa_cliente,cidadeempresa_cliente,ufempresa_cliente,cepempresa_cliente,telefoneempresa_cliente,contatoempresa_cliente,cargoempresa_cliente,complementoempresa_cliente,cnpjempresa_cliente,dataadmissao_cliente,valorrenda_cliente,referenciapessoal1_cliente,referenciapessoal2_cliente,referenciapessoal3_cliente,telefonereferencia1_cliente,telefonereferencia2_cliente,telefonereferencia3_cliente,tipo_cliente,sexo_cliente,grauinstrucao_cliente,naturalidade_cliente,nacionalidade_cliente,nomepai_cliente,nomemae_cliente,ramal_cliente,telmovel2_cliente,numend_cliente,ieempresa_cliente FROM tb_cliente WHERE nome_cliente LIKE '%" + cliente.Nome + "% ' ";
cmd.CommandType = CommandType.Text;
cmd.Connection = con;

MySqlDataReader dr;
dr = cmd.ExecuteReader();

dr.Read();

}

catch (Exception ex)
{
throw new Exception(ex.Message);

}
finally
{
con.Close();
}

Joel Rodrigues
   - 09 out 2013

Eu discordo de 3 coisas nesse seu método:
1) Está recebendo um objeto do tipo Cliente. Não seira mais adequado receber algum tipo de parâmetro de busca, como o campo e o valor a ser buscado?
2) É void. Se é void, indica que ele não retorna nada para a camada de cima.Sendo assim, como você lê o resultado da busca? Creio que o mais adequado seria retornar o resultado da busca como uma lista de clientes.
3) Não está usando parâmetros no MySqlCommand, o que deixa sua aplicação sujeita a ataques de SQL Injection (pesquise sobre isso).

Vinicius Biá
   - 09 out 2013


Citação:
Eu discordo de 3 coisas nesse seu método:
1) Está recebendo um objeto do tipo Cliente. Não seira mais adequado receber algum tipo de parâmetro de busca, como o campo e o valor a ser buscado?
2) É void. Se é void, indica que ele não retorna nada para a camada de cima.Sendo assim, como você lê o resultado da busca? Creio que o mais adequado seria retornar o resultado da busca como uma lista de clientes.
3) Não está usando parâmetros no MySqlCommand, o que deixa sua aplicação sujeita a ataques de SQL Injection (pesquise sobre isso).


Então a 1° Ela está recebendo o objeto do tipo cliente por que é a classe onde contem as variáveis da classe cliente ex:
private string cod_cliente;
private DateTime datacad_cliente;
private string nome_cliente;
private DateTime nasc_cliente;
private string cnpjcpf_cliente;

public string Codigo
{
get { return cod_cliente; }
set { cod_cliente = value; }
}

public DateTime DataCadastro
{
get { return datacad_cliente; }
set { datacad_cliente = value; }
}

public string Nome
{
get { return nome_cliente; }
set { nome_cliente = value; }
}

public DateTime DataNasc
{
get { return nasc_cliente; }
set { nasc_cliente = value; }
}

public string CnpjCpf
{
get { return cnpjcpf_cliente; }
set { cnpjcpf_cliente = value; }
}
A 2° Esta void porque ela se comunica com a camada de Regras, que por sua vez esta eu chamo na camada View

A 3° Realmente eu não usei parâmetros, segue o código aqui com os paramentros

public void Pesquisar(Cliente cliente)
{
MySqlConnection con = new MySqlConnection();

try
{
con.ConnectionString = Dados.StringDeConexao;

con.Open();

MySqlCommand cmd = new MySqlCommand();
cmd.Connection = con;

cmd.CommandText = "SELECT cod_cliente,datacad_cliente,nasc_cliente,cnpjcpf_cliente,ierg_cliente,endereco_cliente,cep_cliente,bairro_cliente,cidade_cliente,uf_cliente,telfixo_cliente,telmovel_cliente,contato_cliente,email_cliente,website_cliente,extra_cliente,estadocivil_cliente,complementoend_cliente,orgaoexpedrg_cliente,dataexpedrg_cliente,empresa_cliente,empresaend_cliente,numendempresa_cliente,bairroempresa_cliente,cidadeempresa_cliente,ufempresa_cliente,cepempresa_cliente,telefoneempresa_cliente,contatoempresa_cliente,cargoempresa_cliente,complementoempresa_cliente,cnpjempresa_cliente,dataadmissao_cliente,valorrenda_cliente,referenciapessoal1_cliente,referenciapessoal2_cliente,referenciapessoal3_cliente,telefonereferencia1_cliente,telefonereferencia2_cliente,telefonereferencia3_cliente,tipo_cliente,sexo_cliente,grauinstrucao_cliente,naturalidade_cliente,nacionalidade_cliente,nomepai_cliente,nomemae_cliente,ramal_cliente,telmovel2_cliente,numend_cliente,ieempresa_cliente FROM tb_cliente WHERE nome_cliente LIKE '%" + cliente.Nome + "% ' ";
cmd.CommandType = CommandType.Text;

cmd.Connection = con;
cmd.Parameters.AddWithValue("@cod_cliente", cliente.Codigo);
cmd.Parameters.AddWithValue("@datacad_cliente", cliente.DataCadastro);
cmd.Parameters.AddWithValue("@nome_cliente", cliente.Nome);
cmd.Parameters.AddWithValue("@nasc_cliente", cliente.DataNasc);
cmd.Parameters.AddWithValue("@cnpjcpf_cliente", cliente.CnpjCpf);
cmd.Parameters.AddWithValue("@ierg_cliente", cliente.Ierg);
cmd.Parameters.AddWithValue("@endereco_cliente", cliente.Endereco);
cmd.Parameters.AddWithValue("@cep_cliente", cliente.Cep);
cmd.Parameters.AddWithValue("@bairro_cliente", cliente.Bairro);
cmd.Parameters.AddWithValue("@cidade_cliente", cliente.Cidade);
cmd.Parameters.AddWithValue("@uf_cliente", cliente.Uf);
cmd.Parameters.AddWithValue("@telfixo_cliente", cliente.TelFixo);
cmd.Parameters.AddWithValue("@telmovel_cliente", cliente.TelMovel);
cmd.Parameters.AddWithValue("@contato_cliente", cliente.Contato);
cmd.Parameters.AddWithValue("@email_cliente", cliente.Email);
cmd.Parameters.AddWithValue("@website_cliente", cliente.WebSite);
cmd.Parameters.AddWithValue("@extra_cliente", cliente.Extra);
cmd.Parameters.AddWithValue("@estadocivil_cliente", cliente.EstadoCivil);
cmd.Parameters.AddWithValue("@complementoend_cliente", cliente.ComplementoEnd);
cmd.Parameters.AddWithValue("@orgaoexpedrg_cliente", cliente.OrgaoExpedRG);
cmd.Parameters.AddWithValue("@dataexpedrg_cliente", cliente.DataExpedRG);
cmd.Parameters.AddWithValue("@empresa_cliente", cliente.Empresa);
cmd.Parameters.AddWithValue("@empresaend_cliente", cliente.EmpresaEnd);
cmd.Parameters.AddWithValue("@numendempresa_cliente", cliente.EmpresaNum);
cmd.Parameters.AddWithValue("@bairroempresa_cliente", cliente.BairroEmpresa);
cmd.Parameters.AddWithValue("@cidadeempresa_cliente", cliente.CidadeEmpresa);
cmd.Parameters.AddWithValue("@ufempresa_cliente", cliente.UfEmpresa);
cmd.Parameters.AddWithValue("@cepempresa_cliente", cliente.CepEmpresa);
cmd.Parameters.AddWithValue("@telefoneempresa_cliente", cliente.TelefoneEmpresa);
cmd.Parameters.AddWithValue("@contatoempresa_cliente", cliente.ContatoEmpresa);
cmd.Parameters.AddWithValue("@cargoempresa_cliente", cliente.CargoEmpressa);
cmd.Parameters.AddWithValue("@complementoempresa_cliente", cliente.ComplementoEmpresa);
cmd.Parameters.AddWithValue("@cnpjempresa_cliente", cliente.CnpjEmpresa);
cmd.Parameters.AddWithValue("@dataadmissao_cliente", cliente.DataAdmissao);
cmd.Parameters.AddWithValue("@valorrenda_cliente", cliente.Renda);
cmd.Parameters.AddWithValue("@referenciapessoal1_cliente", cliente.TelefoneReferencia1);
cmd.Parameters.AddWithValue("@referenciapessoal2_cliente", cliente.TelefoneReferencia2);
cmd.Parameters.AddWithValue("@referenciapessoal3_cliente", cliente.TelefoneReferencia3);
cmd.Parameters.AddWithValue("@telefonereferencia1_cliente", cliente.TelefoneReferencia1);
cmd.Parameters.AddWithValue("@telefonereferencia2_cliente", cliente.TelefoneReferencia2);
cmd.Parameters.AddWithValue("@telefonereferencia3_cliente", cliente.TelefoneReferencia3);
cmd.Parameters.AddWithValue("@tipo_cliente", cliente.Tipo);
cmd.Parameters.AddWithValue("@sexo_cliente", cliente.Sexo);
cmd.Parameters.AddWithValue("@grauinstrucao_cliente", cliente.GrauInstrucao);
cmd.Parameters.AddWithValue("@naturalidade_cliente", cliente.Naturalidade);
cmd.Parameters.AddWithValue("@nacionalidade_cliente", cliente.Nacionalidade);
cmd.Parameters.AddWithValue("@nomepai_cliente", cliente.NomePai);
cmd.Parameters.AddWithValue("@nomemae_cliente", cliente.NomeMae);
cmd.Parameters.AddWithValue("@ramal_cliente", cliente.Ramal);
cmd.Parameters.AddWithValue("@telmovel2_cliente", cliente.TelMovel2);
cmd.Parameters.AddWithValue("@numend_cliente", cliente.NumEnd);
cmd.Parameters.AddWithValue("@ieempresa_cliente", cliente.InscEstadualEmpresa);

MySqlDataReader dr;
dr = cmd.ExecuteReader();

dr.Read();

}

catch (Exception ex)
{
throw new Exception(ex.Message);

}
finally
{
con.Close();
}

Galera eu estou ai tentando aprender rsrsrsrs

Joel Rodrigues
   - 09 out 2013

Beleza, um problema corrigido. Agora pense bem: após fazer o select, pra onde vai o resultado? Se você não retorna nada pra canto nenhum?

Vinicius Biá
   - 09 out 2013

Então Joel, no caso você está falando que o campo que deve ser passado é o compo txtPesquisa, porém esse campo não é referenciado na camada de acesso aos dados, no caso tenho que da um jeito de na camada View fazer isso, rsrsrs

Joel Rodrigues
   - 09 out 2013

Na verdade eu estou falando do retorno do método. Se ele é void, ou seja, não retorna nada, para onde vai o resultado da pesquisa?

E sobre o parâmetro de entrada do método, realmente não é para essa camada referenciar o txtPesquisa, o valor da busca deve ser passada por parâmetro para esse método. Ou seja, a camada de visão vai passar algum texto para esse método na camada de acesso a dados.

Vinicius Biá
   - 09 out 2013

Joel, você tem algum exemplo que eu possa seguir ?

Joel Rodrigues
   - 09 out 2013

Rapaz, existem N formas de fazer, por exemplo:
1) Ler o DataReader e para cada registro, criar um Cliente e inserir em uma lista. Por fim, retornar essa lista.

Dessa forma, na camada de visão você poderia associar o resultado do método diretamente a um DataGridView, por exemplo.