SqlDataSource
SqlDataSource объединяет в себе возможности SqlConnection и SqlDataAdapter (плюс дополнительные).
Итак, у нас есть строка подключения в файле web.config:
<add name="DemoBaseConnectionString1" connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=DemoBase;Integrated Security=True" providerName="System.Data.SqlClient" />
В свойство ConnectionString записывается эта строка:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DemoBaseConnectionString1 %>" ProviderName="<%$ ConnectionStrings:DemoBaseConnectionString1.ProviderName %>" </asp:SqlDataSource>
В свойстве DataSourceMode SqlDataSource задается, посредством DataReader или DataSet получаются данные. При чтении посредством DataReader некоторые возможности не поддерживаются.
Получение данных связано со свойствами, похожими на свойства SqlDataAdapter: SelectCommand, SelectCommandType, DeleteCommand, DeleteCommandType и так далее. SelectCommandType может быть 2 типов — Text и StoredProcedure. Команды выполняются, когда вызываются соответствующие методы.
Метод Select вызывается с параметром типа DataSourceSelectArguments и возвращает DataSet или IDataReader в зависимости от значения свойства DataSourceMode, остальные же методы вызываются без параметров и возвращают количество обработанных строк:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT * FROM [Customers]" ProviderName="<%$ ConnectionStrings:NorthwindConnectionString.ProviderName %>"> </asp:SqlDataSource>
Этот SqlDataSource читает все записи из таблицы Customers с помощью простого запроса в DataSet:
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="[Ten Most Expensive Products]" DeleteCommandType="StoredProcedure"> </asp:SqlDataSource>
Метод Select нет необходимости вызывать явно. Он вызывается автоматически, когда связанному с SqlDataSource элементу нужны данные для отображения.
Процедуры сервера обычно имеют параметры. Поэтому предусмотрены также коллекции параметров. Сами параметры могут быть обычными или связанными с элементами управления.
Значения параметров можно получать и из других разнообразных источников.
Есть несколько классов параметров — наследников класса Parameter: CookieParameter использует значение ключа файла cookie, FormParameter — переменных формы, QuerystringParameter — адресной строки, ProfileParameter — профиля пользователя и SessionParameter — переменной сессии:
<asp:Parameter Name="UID" Type="Int32" DefaultValue="0" />
Такой тип параметров применяется, если SqlDataSource используется как источник данных для элементов с автоматическим связыванием — GridView, FormView, DetailsView. Значение параметра передается во "внутренностях" этих элементов.
В других случаях задействуется ControlParameter, то есть значение параметра берется из элемента управления.
Также задается свойство, откуда и берется значение. Хотя если это Text, его можно не писать:
<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="Sales by Year" SelectCommandType="StoredProcedure"> <SelectParameters> <asp:Parameter Name="Beginning_Date" Type="DateTime" DefaultValue="01.01.1998"/> <asp:ControlParameter Name="Ending_Date" Type="DateTime" ControlID="Calendar2"/> </SelectParameters> </asp:SqlDataSource>
Источник параметра типа "Дата" — элемент управления "Календарь". При заданном свойстве параметра ConvertEmptyToNull текстовый параметр конвертируется в Null, если он пустой (равен System. String.Empty).
Свойство CancelSelectOnNullParameter определяет, будет ли прерван запрос, если значение какого-либо параметра равно Null:
<asp:SqlDataSource ID="SqlDataSource4" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT * FROM [Customers] where @Country is null or Country = @Country" ProviderName="<%$ ConnectionStrings:NorthwindConnectionString.ProviderName %>" CancelSelectOnNullParameter="False"> <SelectParameters> <asp:QueryStringParameter Name="Country" QueryStringField="Country" /> </SelectParameters> </asp:SqlDataSource>
Этот запрос будет брать параметр из командной строки, например
http://localhost:3457/WebSite4/CustomersByCountry.aspx?Country=UK