【发布时间】:2018-12-25 20:00:26
【问题描述】:
如何根据用户选择处理查询中的参数组合。
例如:
public DataTable GetStudents(int fromYear,int toYear,int camp_code,int fac_code,int dep_code)
{
StringBuilder cmdTxt = new StringBuilder();
cmdTxt.Append(" SELECT register_no,name ");
cmdTxt.Append(" FROM student WHERE year BETWEEN ? AND ? ");
cmdTxt.Append(" AND camp_code = ? AND fac_code = ? AND dep_code =? ");//Is a variable
using (var myIfxCmd = new IfxCommand(cmdTxt.ToString(), con))
{
myIfxCmd.CommandType = CommandType.Text;
myIfxCmd.Parameters.Add("year1", IfxType.Integer);
myIfxCmd.Parameters.Add("year2", IfxType.Integer);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
myIfxCmd.Parameters[0].Value = fromYear;
myIfxCmd.Parameters[1].Value = toYear;
//..............
}
- 组织包含一组营地。
- 营地包含一系列学院。
- 学院包含一组部门。
在这段代码中,我想控制(int camp,int fac,int dep)。
如果用户选择所有阵营然后camp = 0 => 整个组织,所以我想忽略
" AND camp_code = ? AND fac_code = ? AND dep_code =? "
在这种情况下,fromYear,toYear 只有两个参数
如果用户选择了一个特定的camp <> 0 并想选择所有学院然后fac_code = 0 => 所有学院,所以我想忽略:
" AND fac_code = ? AND dep_code =? "
在这种情况下,fromYear,toYear,camp_code 只有三个参数
如果用户选择了一个特定的camp <> 0 并选择了一个特定的学院然后想选择这个fac 下的所有部门然后dep_code = 0 => 所有部门,所以我想忽略:
" AND dep_code =? "
在这种情况下,fromYear,toYear,camp_code,fac_code 只有四个参数
如果用户选择所有三个参数 0 那么我们将包含所有具有 5 个参数的事物。
我想让它充满活力和灵活性以满足这些标准。我解决了它,但被几十个(IF-ELSE) 语句淹没了。
【问题讨论】:
标签: c# sql .net ado.net parameterized-query