Предположим, у меня есть экран поиска, предназначенный для поиска предметов. На экране имеются различные необязательные параметры поиска, которые могут привести к изменению оператора SQL-запроса.
Вот несколько примеров поиска:
- Описание поиска
- Описание поиска + идентификатор поставщика товара
- Описание поиска + идентификатор поставщика товара + иерархия элементов уровня 1 id
- Описание поиска + идентификатор поставщика товара + идентификатор иерархии товаров уровень 1 идентификатор + идентификатор уровня 2
- Иерархия элементов уровня 1 ID + идентификатор уровня 2 (без описания, без идентификатора поставщика элемента)
... вы поняли идею. Существует довольно много возможных комбинаций. Я надеялся использовать параметризованные запросы для повышения производительности и тому подобное (плюс я использую их для остальных запросов по всей программе).
Есть ли способ сделать это, или я вынужден либо создать каждый возможный запрос и соответствующий объект SQLiteCommand, либо динамически построить строку запроса с помощью StringBuilder на основе выбранных параметров?
Я использую поставщик данных SQLite.NET с C # 3.0 (на компактной платформе 3.5).
UPDATE
Основываясь на некоторых предложениях с нулевыми значениями по умолчанию для параметров и использованием (@param isnull or column = @param)
, я думаю, что я смогу заставить это работать. Я буду держать вас в курсе.
ПРИМЕЧАНИЕ. Я избегаю использования хранимых процедур, потому что остальная часть кода использует параметризованные запросы вместо хранимых процедур. Я хотел бы, чтобы все было в соответствии с здравым смыслом будущих программистов обслуживания. В любом случае, это не должно иметь большого значения.
ОБНОВЛЕНИЕ 2
Это сработало замечательно на настольной системе (именно там я провел первоначальное тестирование запросов). Однако это было очень медленно на устройстве Windows CE, которое я использовал. Необычайно медленный Тем не менее, я могу определенно использовать это в будущем, и это очень удобно. Только не при выполнении запросов на мобильном устройстве.
Спасибо