自由组合查询
程序和数据库联合起来进行自由组合的查询
在做一个查询功能的时候,用户要根据很多的条件自己去进行任意的组合查询,当时想到了常用的if else,后来想到不行,并不能满足用户的要求,并且还有可能漏掉很多的可能性。于是采用下面的方法:
界面如图:
数据访问层的方法如下:
public DataTable GetMaterInfos(string machine, string slot, string feeder, string starttime, string endtime,string cpn, string username)
{
OracleConnection con = new OracleConnection(base.WebConfigurationConnectionStrings_MESDB());
DataTable dt = new DataTable();
string aa = "AND EQPNAME='"+machine+"'";
string bb = "AND SLOT='"+slot+"'";
string cc = "AND FEEDERNAME='"+feeder+"'";
string dd = "AND USERNAME='"+username+"'";
string ee = "AND PN='" + cpn + "'";
if (machine == "")
{
aa = string.Empty;
}
if (slot == "")
{
bb = string.Empty;
}
if (feeder == "")
{
cc = string.Empty;
}
if (username == "")
{
dd = string.Empty;
}
if (cpn == "")
{
ee = string.Empty;
}
string Sql = "SELECT MONAME,TASKNAME,EQPNAME,SLOT,PN,FEEDERNAME,UPNNAME,UPNQTY,DATETIME,USERNAME FROM GLB_MATERIALHISTORY " +
"WHERE to_date(DATETIME,'YYYY-MM-DD HH24:MI:SS') BETWEEN TO_DATE('" + starttime + "','YYYY-MM-DD HH24:MI:SS') AND TO_DATE('" + endtime + "','YYYY-MM-DD HH24:MI:SS') "+aa+" "+bb+" "+cc+" "+dd+" "+ee+"";
OracleCommand comm = new OracleCommand();
comm.CommandType = CommandType.Text;
comm.CommandText = Sql;
comm.Connection = con;
OracleDataAdapter da = new OracleDataAdapter(comm);
da.Fill(dt);
return dt;
}
因为我不知道用户到底输入了哪几个值,所以如果按照平常那样的话当有一个值为空的时候就查不出来数据,SQL里面都是and,所以上面就让用户点击按钮了以后没有值的话就传入一个空的。问题就解决了、、、