Usuário com melhor resposta
Busca com mais de um parâmetro

Pergunta
-
Estou criando uma busca que tem um formulario com 3 campos (situacao, responsavel, hospital). A ideia é que o usuário possa digitar os 3 ou somente 1 dos campos.
Como ficaria a clausula where?
Tentei algo como:
string where = ""; if (situacao!="") { where += "and situacaoDesejada like '%" + situacao + "%'"; } if (hospital != "") { where += "and hospital like '%" + hospital + "%'"; } if (responsavel != "") { where += "and responsavel like '%" + responsavel + "%'"; }
O problema é que com esse codigo, quando o usuário digita mais de um campo a clausula where ficaria com um AND no começo (select * from tabela where AND situacao=xxx and hospital=xxx and responsavel=xxx).
Existe alguma abordagem melhor para implementar a consulta?
Obrigado
Respostas
-
Olá existe alguns modos de se fazer isso ! primeiro eu usaria parametros para evitar injecao de sql !
mas nessa logica que vc fez conseguimos ajeitar pra mais ou menos assim :
var strings = new List<string>(); if(hospital != "") strings.Add(hospital); if(...... strings.Add(situacao); ...... //no where string where = string.Empty; int count = 0; foreach(var item in strings) { if(count == 0) where = item +"like %....; else where += "AND " + item + "like....."; count++; }
Assim funciona mas use parametros.
- Marcado como Resposta Rodrigo Calado sábado, 22 de fevereiro de 2014 14:46
Todas as Respostas
-
Olá existe alguns modos de se fazer isso ! primeiro eu usaria parametros para evitar injecao de sql !
mas nessa logica que vc fez conseguimos ajeitar pra mais ou menos assim :
var strings = new List<string>(); if(hospital != "") strings.Add(hospital); if(...... strings.Add(situacao); ...... //no where string where = string.Empty; int count = 0; foreach(var item in strings) { if(count == 0) where = item +"like %....; else where += "AND " + item + "like....."; count++; }
Assim funciona mas use parametros.
- Marcado como Resposta Rodrigo Calado sábado, 22 de fevereiro de 2014 14:46
-
-
Olá Rodrigo, não aconselho montagem de comandos concatenando strings, você terá que tratar questões de segurança já disseminadas e muito quando se refere a este tipo de uso.
Utilize DBCommand e DBParameter's.
Sugiro você refazer seu algoritmo para deixar o comando mais ou menos desta forma:
sql="select .... from .... where @param1 like '%@value1%' ..."Veja este link:
http://stackoverflow.com/questions/7113667/creating-dynamic-sql-dbparameter-values
Tem até uns métodos que te ajudaria na montagem do seu algoritmo.Falou!
---- Ajudou? Marque como útil! :D
-
Implementei desta forma pra ver funcionar e deu tudo certo.!!
O proximo passo é implementar usando parâmetros.private string montaCondicao(string situacao, string responsavel, string hospital) { var strings = new List<string>(); if (hospital != "") { strings.Add("hospital like '%" + hospital + "%'"); } if (situacao!="") { strings.Add("situacaoDesejada like '%" + situacao + "%'"); } if (responsavel!="") { strings.Add("responsavel like '%" + responsavel + "%'"); } string where = string.Empty; int count = 0; foreach (var item in strings) { if (count==0) { where = item; count++; } else { where += " and " + item; count++; } } return where; }