Большая задача для меня. У меня есть несколько вопросов. Вы, ребята, уже очень помогли мне, но я получаю одну трудность за другой и прогрессирующую невероятно медленно. Эти вопросы лучше описывают мои задачи.
У меня есть страница aspx со следующими элементами управления: TextBox, CheckBoxList, DropDownList. Они используются для указания критериев поиска. Записи берутся из базы данных SQL Server с помощью хранимой процедуры.
0) Это ясно, как передать текст из TextBox для поиска продукта по названию. Здесь нет вопросов.
1) Каждый CheckBox в CheckBoxList имеет значение, которое является фактическим идентификатором группы продуктов в базе данных. Если выбрано более одного флажка, как передать список идентификаторов в хранимую процедуру как набор, чтобы я мог использовать IN @IdList? Какие типы переменных следует использовать в С# и T-SQL? Возможно ли вообще?
2) DropDownList первый элемент - "ВСЕ". Когда выбрано "ALL", мне нужно передать что-то вроде NULL в хранимую процедуру. Как заставить хранимую процедуру игнорировать параметр, если он NULL?
Я измучен, идеи больше не появляются, я даже попытался выполнить поиск по каждому критерию отдельно, а затем поместить найденные идентификаторы в отдельные массивы, сравнить их и составить результирующий массив с общими идентификаторами, но было множество проблем, Я должен был использовать гигантские статические массивы, неэффективное использование памяти, не смог создать динамические массивы, не смог проверить пересечение только ненулевых элементов и т.д., Поэтому я отказался от этой идеи...
CREATE PROCEDURE FilterList
@ProductName nvarchar(200),
@ProductGroupID int
AS BEGIN
SELECT
prod_id AS 'ID',
prod_name AS 'Name'
FROM
dbo.Products
WHERE
prod_group_id = @ProductGroupID OR
prod_name = @ProductName
END