求一查询思路!
要按条件搜索产品列表,但条件个数不定,比如搜索手机产品,客户可能只设定网络为GSM一个条件,也可能再加上价格小于2000条件,总之条件个数不确定,但所有条件都是已知的。要写成一个函数,条件参数怎么写?
public List<MobileInfo> Search(/*??????*/) // ????????
{
}
条件可能是1 个,也可能是5个,如果把每个条件作为一个参数进行函数重载不现象吧,我也不想拼接SQL字符串?
该怎么写? --------------------编程问答-------------------- public List<MobileInfo> Search(string[] arg) // ????????
{
....
}
--------------------编程问答-------------------- 参数是数组 --------------------编程问答-------------------- 这是多条件查询,把每个条件都组合起来就行了。 --------------------编程问答-------------------- 参数声明params数组。
public List<MobileInfo> Search(pararms string[] paramList);
调用 Search(filed1, field2);
Search(field2);
Search)field1, field2, field3); --------------------编程问答-------------------- Search)field1, field2, field3); -> Search(field1, field2, field3); --------------------编程问答--------------------
--------------------编程问答-------------------- 赞同楼上,查询条件一个一个添加到查询字符串里
string strWhere="select * from table where 1=1"
if(条件1!=string.empty)
{
strWhere+=条件1
}
if(条件2!=string.empty)
{
strWhere+=条件2
}
....
(1)连接数据库
(2)拼凑查询字符串
string str="select * from 表名 where 1=1";
if(条件1!="")
str=str+" and "+"条件1";
if(条件2!="")
str=str+" and "+"条件2";
if(条件3!="")
str=str+" and "+"条件3";
……
(3)查询 --------------------编程问答--------------------
public List <MobileInfo> Search(pararms string[] paramList)--------------------编程问答-------------------- 模型就是 职责链模式
{
string strSql="select * from 表名 where 1=1";
foreach (string strPar in paramList)
{
if (strPar != null && strPar.Trim() != "")
{
strSql += " AND ("+ strPar +") ";
}
}
strSql += " Order By orderField ";
// ...
}
职责链模式最原始的模型 就是7楼的那个判定 --------------------编程问答--------------------
//调用:--------------------编程问答-------------------- 拼接把!!!!!!!!!! --------------------编程问答-------------------- 感觉拼接好像是最好的办法,但是怎么处理安全问题呢,好像有注入漏洞,我一般用SqlParameter传参数进去,拼接好像就用不了这个,因为查询条件可能是string和int型。 --------------------编程问答-------------------- int可以转换成string传进去后,在转回int
Search("field1=100");
Search("field1>100", "field1<200");
Search("field1>100 and field1 <> 102");
Search(new string[]{"field1=100 or field2='ABC'", "field3 like 'A%'"});
补充:.NET技术 , ASP.NET