• Microsoft .NET
  • ASP.NET
  • Инструкция по файлам куки (Сookie) в ASP.NET для новичков

Фильтрация базы данных при помощи параметров в ASP.NET 2.0 - Фильтрация посредством SqlDataSource

ОГЛАВЛЕНИЕ

Фильтрация посредством SqlDataSource

Для начала создайте ASP.NET-страницу и перейдите в режим дизайнера (Design). Далее  перетащите элемент SqlDataSource из Toolbox. Как мы уже  убедились во второй части, мы можем указать базу данных, к которой необходимо установить соединение, а также запрос SQL SELECT, нажав на ссылку "Configure Data Source" (настроить источник данных) в смарт-теге элемента SqlDataSource. Если помните, существует два экрана, где можно указать SELECT-запрос:

  • указать колонки из таблицы либо представления - здесь вы можете выбрать таблицу или представление из выпадающего списка и выбрать те колонки, которые вы хотите получить
  • указать специализированное SQL-выражение либо хранимую процедуру - при помощи данной опции вы можете выбрать хранимую процедуру из выпадающего списка либо вручную ввести SQL-запрос (или использовать Query Builder)

Если вы выбере те первый вариант, то после выбора таблицы или представления, а также колонок, нажмите на кнопку WHERE для добавления параметра фильтрации. Это выведет диалоговое окно Add WHERE Clause (как показано ниже), где вы можете указать фильтруемую колонку, используемый оператор (=, <, <=, > и т.д.) и источник значения фильтрации (жёстко запрограммированного значения из строки запроса, другого элемента управления на странице и т.д). Вскоре мы рассмотрим способ указания различных типов значений параметров.

Ограничения в использовании диалогового окна "Add WHERE Clause"
При фильтрации посредством указания колонок таблицы либо представления ("Specify columns from a table or view") существует один явный недостаток - хотя вы можете добавлять множество параметров фильтрации, данные параметры объединены при помощи оператора AND ("и"). Так что если вам нужно фильтровать значения, основываясь на множестве условий, и вам необходимо их объединить также при помощи оператора OR ("или") (к примеру SELECT * FROM Products WHERE UnitPrice < 15.00 OR UnitPrice > 25.00), то вам необходимо вручную добавить SELECT-запрос и выражение WHERE посредством опции указания специализированного запроса либо хранимой процедуры ("Specify a custom SQL statement or stored procedure").

Если вы используете опцию указания специализированного запроса ("Specify a custom SQL statement or stored procedure"), вы можете либо ввести SQL-запрос вручную, либо выбрать хранимую процедуру из выпадающего списка. Для добавления параметров фильтрации в произвольный SQL-запрос, просто добавьте параметры при помощи соответствующего синтаксиса. Поскольку база данных Northwind, используемая в моих примерах, является базой данных Microsoft Access, то я использую символ ? для определения параметров. К примеру, если бы я хотел использовать произвольное SQL-выражение, то я бы ввел в текстовое поле SELECT:

SELECT ProductID, ProductName FROM Products WHERE UnitPrice < ? 

Тем не менее, если вы используете базу данных SQL Server, то вы должны применять синтаксис @ParameterName. После указания параметров посредством правильного синтаксиса нажмите кнопку Next, и вы увидите окошко, которое спрашивает о значениях параметров.

Шаг 1: укажите произвольное параметризированное SQL-выражение


Шаг 2: нажмите Next и укажите значения для параметра(ов)


Если вы используете базу данных, которая поддерживает параметризированные хранимые процедуры (такие как Microsoft SQL Server), то вы можете выбрать хранимую процедуру из выпадающего списка и нажать далее (Next). В следующем окошке (показанном выше) вы увидите параметры хранимой процедуры и сможете указать способ назначения их значений.

Независимо от того подхода, который вы выберете, как только вы укажете значения параметров и завершите настройку посредством мастера SqlDataSource, SqlDataSource обновит свои свойства. В частности, SelectCommand теперь станет параметризированным запросом, и будет существовать серия экземпляров SelectParameter. Поскольку типы экземпляров SelectParameter различаются в зависимости от того, как значение параметра получило свое значение, мы более детально рассмотрим результирующую разметку SqlDataSource в каждом примере.

Если вы мастер своего дела, то вы всегда можете вручную указать параметризированный запрос и SelectParametersSelectQuery в панели свойств (Properties) SqlDataSource в режиме дизайнера (Design). Тем самым отобразится редактор команд и параметров (Command and Parameter Editor) как показано на следующем изображении. (посредством ввода разметки), либо нажав на свойство

Почему мы не используем FilterExpression и FilterParameters?

Если вы исследуете свойства SqlDataSource, то вы заметите FilterExpression и FilterParameters среди них. Вам наверняка станет интересно, почему мы их не используем. FilterExpression и FilterParameters являются теми свойствами, которые были разработаны для фильтрации результатов, возвращенных базой данных. То есть после того как записи были возвращены из базы данных, они будут далее отфильтрованы свойствами FilterExpression и FilterParameters перед тем, как они будут переданы элементу управления либо программисту, чей код запросил информацию источника данных. С другой стороны, используя параметризированный запрос, SelectParameters производит фильтрацию на стороне базы данных.

Как вы уже наверняка догадались, фильтрация на стороне базы данных является более эффективной, чем возврат всей информации в элемент управления и ее последующая фильтрация. Тем не менее,  может случиться так, что нам понадобится использовать свойства (бывают времена когда нам понадобилось бы использовать свойства) FilterExpression и FilterParameters - на самом деле, обе техники могут быть использованы последовательно.