Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Элемент управления SqlDataSource




Элемент управления SqlDataSource предназначен для двунаправленного обмена с любым источником данных, к которому есть доступ с использованием управляемых поставщиков ADO.NET. Поддерживается постраничный вывод (для умеющих это делать элементов управления) и сортировка, кэширование и фильтрация. При получении данных можно использовать параметры. Также элемент управления SqlDataSource может обновлять данные в источнике данных. Все эти возможности поддерживаются на декларативном уровне. Ограничением является реализация сортировки, постраничного вывода, кэширования и фильтрации только при получении данных с использованием DataSet.

Разберём простейший пример использования SqlDataSource. Для получения данных достаточно указать у элемента SqlDataSource значение свойств ConnectionString ‑ строка подключения, ProviderName – имя управляемого поставщика и SelectCommand – SQL-команда для выборки.

<asp:SqlDataSource ID="SqlDS" runat="server" ConnectionString="..."

SelectCommand="SELECT * FROM [Performers]"

ProviderName="System.Data.SqlClient" />

Строку подключения можно задать с использованием элемента из секции <connectionStrings> файла web.config. При этом можно указать и используемого поставщика, что автоматически освобождает от определения свойства ProviderName:

<connectionStrings>

<add name="CatalogCS"

connectionString="Data Source=(local)\SQLExpress;..."

providerName="System.Data.SqlClient" />

</connectionStrings>

 

<asp:SqlDataSource ID="SqlDS" runat="server"

ConnectionString="<%$ ConnectionStrings:CatalogCS %>"

SelectCommand="SELECT * FROM [Performers]">

</asp:SqlDataSource>

Рассмотрим работу с SqlDataSource на примерах. При наличии опыта использования DataAdapter работа с SqlDataSource не вызовет трудностей. Для задания запроса получения данных используется свойство SelectCommand вместе с сопутствующими свойствами SelectCommandType и SelectParameters. Тип возвращаемого набора данных (и внутренний класс, используемый для хранения данных) определяет свойство DataSourceMode, принимающее значение DataSet или DataReader.

<asp:SqlDataSource ID="SqlDS" runat="server"

ConnectionString="<%$ ConnectionStrings:CatalogCS %>"

SelectCommand="SelectAll" SelectCommandType="StoredProcedure"

</asp:SqlDataSource>

Ознакомимся с заданием параметров для запроса. Параметры выборки данных описываются в коллекции SelectParameters и включаются в текст команды SelectCommand с использованием префикса @.

<asp:SqlDataSource ID="SqlDS" runat="server"

ConnectionString="<%$ ConnectionStrings:CatalogCS %>"

SelectCommand="SELECT * FROM [Performers] WHERE name=@name">

<SelectParameters>

<asp:Parameter Name="name" />

</SelectParameters>

</asp:SqlDataSource>

При таком указании параметра единственный способ его изменить – это использовать программный код. Но SqlDataSource позволяет определить специальные виды параметров, значения которых автоматически вычисляются из самых разных источников – из адресной строки, сессии, профиля пользователя, переменных формы и серверных элементов управления. Например, при получении значения из адресной строки объявление параметра будет таким:

<asp:QueryStringParameter Name="name" QueryStringField="getN" />

А для получения значения из элемента управления TextBox нужно написать следующий код:

<asp:ControlParameter Name="name" ControlID="tbxName"

PropertyName="Text" />

При задании параметра можно указать дополнительные свойства: DefaultValue ‑ для значения по умолчанию, Type – для указания типа данных. Свойство SqlDataSource.CancelSelectOnNullParameter определяет, прерывать ли выполнение запроса, если какой-либо из параметров равен null, а свойство Parameter.ConvertEmptyStringToNull указывает на необходимость конвертации пустых значений параметров в null.

Как упоминалось ранее, элемент управления SqlDataSource поддерживает кэширование получаемых данных. Кэширование работает только в режиме DataSet и включается с помощью свойства EnableCaching. Кроме того, у SqlDataSource есть свойства для установки политики кэширования – CacheDuration, CacheExpirationPolicy, CacheKeyDependency и SqlCacheDependency. SqlDataSource кэширует данные с учетом параметров, то есть для приведенного выше примера для каждого значения параметра name в кэше будет создана отдельная запись. В некоторых случаях это удобно, но иногда оптимальнее закэшировать в памяти весь набор данных и уже из этого набора выбирать нужные данные фильтрацией. Это можно сделать с помощью свойства FilterExpression, задающего выражения для фильтрации, и коллекции FilterParameters, задающей значения для фильтра.

Вот пример описания элемента управления SqlDataSource, кэширующего получаемый список на одну минуту и использующего фильтрацию по имени:

<asp:SqlDataSource ID="SqlDS" runat="server"

ConnectionString="<%$ ConnectionStrings:CatalogCS %>"

SelectCommand="SELECT * FROM [Performers]"

EnableCaching="True" CacheDuration="60"

FilterExpression="name = '{0}'">

<FilterParameters>

<asp:ControlParameter ControlID="tbx" Name="Name"

PropertyName="Text" />

</FilterParameters>

</asp:SqlDataSource>

SqlDataSource может не только получать данные, но и умеет эти данные обновлять. Как и DataAdapter, он использует для этого свойства UpdateCommand, DeleteCommand и InsertCommand, настройка которых в принципе аналогична настройке SelectCommand. Для обновления данных SqlDataSource может использовать параметризованные запросы или хранимые процедуры

Рассмотрим пример, в котором GridView и SqlDataSource используются не только для отображения, но и для редактирования данных таблицы Performers. Начало описания SqlDataSource уже знакомо:

<asp:SqlDataSource ID="SqlDS" runat="server"

ConnectionString="<%$ ConnectionStrings:CatalogCS %>"

SelectCommand="SELECT * FROM [Performers]"

Так как элемент управления GridView поддерживает редактирование и удаление данных, но не поддерживает их добавления, определим только Update и Delete команды:

DeleteCommand="DELETE FROM [Performers] WHERE [id] = @old_id"

UpdateCommand="UPDATE [Performers] SET [name] = @name,

[is_group] = @is_group WHERE [id] = @old_id"

Также нужно задать свойства для передачи оригинальных параметров:

ConflictDetection="OverwriteChanges"

OldValuesParameterFormatString="old_{0}" >

Теперь в SqlDataSource осталось только описать коллекции параметров для команд обновления и удаления:

<DeleteParameters>

<asp:Parameter Name="old_id" Type="Int32" />

</DeleteParameters>

<UpdateParameters>

<asp:Parameter Name="name" Type="String" />

<asp:Parameter Name="is_group" Type="Boolean" />

<asp:Parameter Name="old_id" Type="Int32" />

</UpdateParameters>

Необходимо минимально настроить и GridView:

<asp:GridView ID="gv" runat="server" DataSourceID="SqlDS"

AutoGenerateColumns="False" DataKeyNames="id">

<Columns>

<asp:BoundField DataField="id" HeaderText="id"

InsertVisible="False" ReadOnly="True" />

<asp:BoundField DataField="name" HeaderText="name" />

<asp:CheckBoxField DataField="is_group" />

<asp:CommandField ButtonType="Button"

ShowDeleteButton="True"

ShowEditButton="True" />

</Columns>

</asp:GridView>

Кроме возможности декларативного взаимодействия с визуальными элементами управления, SqlDataSource предоставляет программную возможность вызова команд с помощью соответствующих методов – Select(), Insert(), Update() и Delete(). Метод Select() вызывается с параметром типа DataSourceSelectArguments и возвращает DataSet или IDataReader в зависимости от значения свойства DataSourceMode, остальные же методы вызываются без параметров и возвращают количество обработанных строк.

Рассмотрим пример использования методов SqlDataSource. В предыдущем примере не использовалось свойство InsertCommand, так как элемент управления GridView не умеет добавлять данные. Исправим это упущение с помощью дополнительных элементов управления ‑ разместим на форме поле для ввода, переключатель и кнопку для добавления введенных данных в базу:

<p />Add Performer<p />

Name: <asp:TextBox ID="txtName" runat="server" /> <br />

Is Group: <asp:CheckBox ID="cbxGroup" runat="server" /> <br />

<asp:Button ID="btnAdd" runat="server" Text="Add" />

Добавим в описание SqlDataSource команду для вставки записи:

InsertCommand="INSERT INTO [Performers] ([name], [is_group])

VALUES (@name, @is_group)"

...

<InsertParameters>

<asp:ControlParameter ControlID="txtName" Name="name"

PropertyName="Text" Type="String" />

<asp:ControlParameter ControlID="cbxGroup" Name="is_group"

PropertyName="Checked" Type="Boolean" />

</InsertParameters>

Далее в обработчике события Click кнопки нужно записать:

SqlDS.Insert();

При нажатии на кнопку Add в базу добавится новая запись, содержащая введенные значения. Аналогичным образом можно вызвать и остальные методы изменения данных.

SqlDataSource для каждой своей команды предоставляет пару событий вида ИмяКоманды ing и ИмяКоманды ed, которые происходят соответственно перед вызовом команды и сразу же после него. Кроме этого, SqlDataSource имеет событие Filtering, происходящее перед применением фильтра к полученным данным.




Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 947; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.