none
Consulta com Filtro RRS feed

  • Pergunta

  • Pessoal,

    Tenho uma tela que tem um filtro com n campos, e uma gridview.

    Gostaria de ter um exemplo de como e qual a melhor prática no qual poderia programar a query no qual receberá esses parametros para se fazer a consulta..

    Obrigado

     

     

    quarta-feira, 1 de fevereiro de 2012 23:20

Todas as Respostas

  • Boa tarde AT.CM,

    De um exemplo melhor do que você precisa. Você foi muito vago pode ser N melhores maneiras.

    Ira depende de n-fatores como.

    Se voce tem muitos registros na tela.

    Se pode excluir resultados apenas pelo where.

    Se precisa de cache.

    A melhor pratica para filtrar e a mais simples é a seguinte.

    Criar todo o acesso a dados na mão, ou seja via código você consegue ter mais poder sobre o código alterando qualquer trecho caso necessário.

    O uso do SqlParameter que converte o seu objeto para um parametro do banco impedindo SQL-Injection e acelerando o seu resultado.

    Um exemplo básico seria.

    string sql = @"select * from teste where campo_filtro = @filtro";
    
    List<SqlParameter>  parameters  = new List<SqlParameter>();
    
    parameters.Add(new SqlParameter("@filtro", valor_a_ser_filtrado));
    
    SqlCommand cmd = new SqlCommand();
    
    cmd.Connection = new SqlConnection("string_de_conexao");
    
    cmd.Parameters = parameters;
    


    A partir daqui vai depender se voce precisa de velocidade ou não executando um dataset ou um dataadapter ou um datareader.

    Escrevi o código acima sem testes só lembrando mas essa é a melhor pratica.

    Segue alguns links abaixo usando o mesmo exemplo.

    http://www.macoratti.net/09/05/c_adn_4.htm

    http://www.macoratti.net/08/11/c_adn_1.htm

    http://msdn.microsoft.com/en-us/library/dw70f090.aspx

     

    quinta-feira, 2 de fevereiro de 2012 01:11
  • Obrigado pelas dicas,

    A tela terá alguns campos que farão parte do filtro, opcionais, como por exemplo nome, data, situação.

    Após os parÂmetros serem informados, a consulta pode ser realizada baseada nos mesmos.

    Ai a questão de qual seria a melhor forma, usando uma SP por exemplo.. Ou de outra forma..

     

    quinta-feira, 2 de fevereiro de 2012 01:21
  • SP acredito que não será a melhor maneira pois a todo momento você estará mudando o plano de execução que é a vantagem de SP pois ele constrói um e o reutiliza.

     Eu faco com sql dinamico concatentando a string conforme vem o filtro por exemplo.

    Imagine 2 booleanos de filtros, ComPreco e Ativo.

    Ficaria assim.

    StringBuilder sql = new StringBuilder();
    
    sql.Append("SELECT * FROM bla WHERE   ";
    
    if (ComPreco)
    
    sql.Append(" comPreco = @comPreco and")
    
    if (Ativo)
    
    sql.Append("  Ativo  = @Ativo and")
    
    string sqlFinal = sql.ToString().SubString(0, sql.ToString().Lenght-3);
    


    Por exemplo, ele irá montando a consulta conforme necessário

    quinta-feira, 2 de fevereiro de 2012 01:44