В моей веб-форме на C # asp.net у меня есть страница поиска, содержащая примерно 20 элементов, которые «могут» использоваться как часть поиска. Позже будет добавлено больше.
Я расширил текстовое поле и раскрывающийся список, включив в него несколько переменных:
fieldname: Tablename.columnname
dbtype: DbType.Int32
Joinparam: LEFT Присоединиться к другой таблице ВКЛ. X.y = a.b
Все они хранятся в viewstate и загружаются обратно. Причина, по которой я это делаю, состоит в том, чтобы я мог перебирать все элементы управления и извлекать все элементы управления моего типа. Затем я могу проверить их, чтобы убедиться, что они имеют ввод и имеют правильный тип. В таком случае я могу передать их на уровень доступа к базе данных и позволить коду динамически генерировать оператор SQL.
Я не позволяю ничего, кроме утверждений SELECT, происходящих из этого. Поля, выбранные и возвращенные, не могут быть изменены, и я использую параметр dbparameter, чтобы избежать внедрения sql.
Меня беспокоит то, что я поместил имена таблиц и полей, которые будут использоваться в критериях поиска, и требуемые JOINS все в состоянии просмотра. Это действительно плохая идея?
Я мог бы скрыть это, просто имея некоторые индексы int в таблицах, которые хранят эту информацию в БД, но это все равно нужно поместить в viewstate и просто означать, что у них будет дополнительный слой для выяснения.
Причина, по которой я пошел на такой подход, заключалась в том, что я не хотел помещать тонны операторов IF в слой DB, чтобы построить там оператор. Это было бы ужасно, черт возьми, и боль, чтобы поддерживать.
Спасибо за любые советы по этому поводу.
Jon
EDIT
Спасибо всем за совет. К счастью, это приложение только для внутреннего использования, поэтому ущерб будет ограничен. Но я больше никогда не буду использовать эту технику и вместо этого буду работать над идеей шаблона поиска.
Приветствия:)