Inquiridor
Consulta com Filtro

Pergunta
-
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
-
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..
-
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