应用场景描述:要使用多个字段的值,对结果数据记性筛选。当一些字段为空时,对该字段的筛选不限制。这里给出一种通用的做法。
- 使用
HashTable
作为关键字以及用户输入值的保存数据结构。 - 编写接口函数,接收该参数,组装
Sql
语句。 - 对关键字及其值,使用
like
当点击搜索
按钮后,会进入下面的函数进行处理。
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Hashtable ht = new Hashtable();
string ComID = CompanyDDL.SelectedValue;
string DepID = DepDDL.SelectedValue;
string empName = Name.Text;
string account = Account.Text;
ht.Add("companyID", ComID);
ht.Add("depID", DepID);
ht.Add("empName", empName);
ht.Add("empAccount", account);
EmployerDB empDb = new EmployerDB();
DataTable dt = empDb.getEmpByHashTable(ht);
EmpList.DataSource = dt;
EmpList.DataBind();
}
然后,让我看一下empDb.getEmpByHashTable(ht)
是如何处理的。
public DataTable getEmpByHashTable(Hashtable ht)
{
string sql = "select * from Employer where Status=1 ";
foreach(string key in ht.Keys)
{
sql +=" and "+ key.ToString() + " like '" + [key] + "%'";
}
return SelectTable(sql);
}
通过简单的字符串的拼接,就能得到想要的sql
执行语句。
其中主要的点,就是用到了
like
这个关键字。原因说明,当用户输入的要查询字段为空时,这个字段对应的值就是a like '%'
的形式,这样显然会匹配所有的项。而不用考虑,字段值是否输入的问题。
接下来,就是把该语句执行到SqlServer
数据库,返回结果table
即可。