asp.net 应用开发(SQL查询条件拼合)思路
2012-07-04 17:36 秋日愚夫 阅读(854) 评论(3) 编辑 收藏 举报场景:表单中有多个查询项,用户可以随机选择其中若干个,查询条件。
问题:怎样将用户所选的查询项,拼接成SQL语句。
思路:1,写一个SWITCH用非空域,匹配查询项语句。并与用户输入值拼合成基本查询子项单元。
2,将上一步结果存入LIST<string>。
3,遍历list,基本查询子项单元之间 用"and"连接,生成最终的查询条件。
代码:明天上。。。。现在要下班喽。。。
//根据表单生成查询条件既where子句,用于传递给ORM private string GetQuery() { string Result = string.Empty; Dictionary<string, string> QueryItems = new Dictionary<string, string>(); QueryItems = GetParaAndCreateQueryItems(); //从表单中的控件获取值,并且把非空项生成查询子项集(键值对)。 Result = SetResultByQueryItems(QueryItems);//根据查询子项集,拼合成Where子句 if (string.IsNullOrEmpty(Result)) { Result = " 1=1 "; } return Result; } private string SetResultByQueryItems(Dictionary<string, string> QueryItems) { string Result = string.Empty; List<string> Where =new List<string>(); foreach (var s in QueryItems) { string Temp = string.Empty; switch (s.Key) { case "tagstring": Temp = string.Format(" tagstring = '{0}' ", s.Value); break; case "starttime": Temp = string.Format(" OperateTime > '{0}' ", s.Value); break; case "endtime": Temp = string.Format(" OperateTime < '{0}' ", s.Value); break; case "operatetype": if (s.Value != "IO") { Temp = string.Format(" operatetype = '{0}' ", s.Value); } break; } Where.Add(Temp); } foreach (string s in Where) { if (string.IsNullOrEmpty(s)) { continue; } Result += string.Format("{0} and", s); } Result = Result.TrimEnd().TrimEnd('d').TrimEnd('n').TrimEnd('a'); return Result; } private Dictionary<string, string> GetParaAndCreateQueryItems() { Dictionary<string, string> Result = new Dictionary<string, string>(); string TagString = this.txtTagstring.Text; string StartTime = this.txtStartTime.Text; string EndTime = this.txtEndTime.Text; string OperateType = this.ddlOperateType.SelectedValue; if (!string.IsNullOrEmpty(TagString)) { Result.Add("tagstring", TagString); } if (!string.IsNullOrEmpty(StartTime)) { Result.Add("starttime", DateTime.Parse(StartTime).ToString()); } if (!string.IsNullOrEmpty(EndTime)) { Result.Add("endtime", DateTime.Parse(EndTime).AddDays(1).AddSeconds(-1).ToString()); } if (!string.IsNullOrEmpty(OperateType)) { Result.Add("operatetype", OperateType); } return Result; }
最终页面,就是这样了。。。