Использование баз данных в приложениях ASP.NET
Использование параметров в запросах
В большинстве реальных приложений работы с данными невозможно применять жестко закодированные запросы, т. к. в зависимости от используемого режима они должны содержать различные данные. Для решения этой задачи задействуются параметры, применение которых уже рассматривалось в разделе "Использование параметризованных команд". Для демонстрации этой техники совместно с элементами управления источниками данных создадим форму, отображающую главную и подчиненную таблицы. Роль главной таблицы будет выполнять таблица "Товары", роль подчиненной - "Закупки". При выборе определенного товара на форму должны выводиться только операции закупки данного товара.
Поместим на форму элементы DropDownList и SqlDataSource. Настроим данные элементы на подключение к источнику данных, содержащему список товаров. Определения этих элементов выглядят следующим образом:
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="НаименованиеТовара" DataValueField= "КодТовара" Width="196px" AutoPostBack="True"> </asp:DropDownList> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TEST_DBConnectionString %>" SelectCommand="SELECT DISTINCT [КодТовара], [НаименованиеТовара] FROM [Товары]"> </asp:SqlDataSource>
Следует обратить внимание на то, что свойство AutoPostBack элемента DropDownList установлено равным true. Это необходимо для обеспечения автоматического инициирования обратной отсылки при изменении текущего элемента списка, чтобы страница изменялась при выборе другого элемента списка. Нужно сделать так, чтобы при выборе товара из списка содержимое элемента GridView, отображающего закупки, обновлялось. Для реализации данного механизма поместим на форму элементы GridView и еще один - SqlDataSource. Настроим SqlDataSource в соответствии со следующим определением:
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings: TEST_DBConnectionString %>" SelectCommand="SELECT Закупки.КодОперации, Закупки.ДатаОперации, Контрагенты.НаименованиеКонтрагента AS Контрагент, Закупки.Количество, Закупки.Цена, Закупки. Количество * Закупки.Цена AS Стоимость FROM Закупки INNER JOIN Контрагенты ON Закупки.КодКонтрагента = Контрагенты. КодКонтрагента WHERE (Закупки.КодТовара = @Product )"> <SelectParameters> <asp:ControlParameter ControlID="DropDownList1" Name="Product" PropertyName="SelectedValue" /> </SelectParameters> </asp:SqlDataSource>
Ключевыми элементами настройки SqlDataSource являются строка запроса, определенная в свойстве SelectCommand, и параметры, определенные в разделе <SelectParameters>. В строке запроса определен параметр @Рroduct, который используется для фильтрации списка закупок по значению кода товара. В разделе параметров определен один параметр, для которого установлено имя Product. Значение для этого параметра извлекается из свойства SelectedValue объекта DropDownList1. Пример экрана браузера, получаемого после запуска данного приложения, представлен на рис. 10.24.
В данном примере значение параметра Product подставляется автоматически из свойства SelectedValue элемента DropDownList. Тем не менее существует возможность использования и других элементов управления, значения свойств которых можно задействовать для этих целей. Для того чтобы настроить извлечение параметра из элемента управления и подстановку его значения в качестве параметра запроса, определенного в SqlDataSource, можно воспользоваться визуальными средствами Visual Studio 2005. Для вызова диалогового окна редактора параметров (
рис.
10.25) нужно щелкнуть по кнопкеокна.
Допустимые типы источников данных параметров можно выбирать из списка. При этом допустимы следующие значения списка:
Control | Свойство элемента управления. |
Cookie | Значение Cookie набора. |
Form | Переменная формы. С помощью данного типа источника данных параметра можно извлекать значения, отправленные странице элементом ввода. |
Profile | Значение текущего профиля пользователя. |
QueryString | Строковое значение запроса. Позволяет извлекать значение из текущей строки запроса. |
Session | Значение состояния сеанса. |