|
https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Работа с базами данных (продолжение). Элементы-источники данных (Data Source Controls)
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]"
SelectCommandType="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