Как обрабатывать комбинацию параметров в запросе на основе выбора пользователя.
Например:
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
и выбирает конкретный факультет, то хочет выбрать все кафедры по этому факультету, тогда dep_code = 0
=> все кафедры, поэтому я хочуигнорировать:
" AND dep_code =? "
И в этом случае у меня есть только четыре параметра для fromYear,toYear,camp_code,fac_code
Если пользователь выберет все три аргумента <> 0, то мы включим все, что имеет5 параметров.
Я хочу сделать его динамичным и гибким, чтобы соответствовать этим критериям.Я решаю это, но поражен десятками (IF-ELSE)
заявлений.