КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |