Asp доступ к источнику данных


Содержание

ASP: параметры безопасности на этом компьютере запрещают доступ к источнику данных в другом домене

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

Параметры безопасности на этом компьютере запрещают доступ к источнику данных в другом домене.

после многого поиска в Google я нашел решение — в IE, добавив эту ссылку в доверенные сайты. но это не принято, поскольку клиент не может выполнить эти настройки. Поэтому мне нужно другое решение, кроме добавления его на доверенные сайты.

ASP.NET – доступ к базе данных

ASP.NET позволяет получать доступ и использовать следующие источники данных:

  • Базы данных (например, Access, SQL Server, Oracle, MySQL)
  • XML документы
  • Бизнес Объекты
  • Плоские файлы

ASP.NET скрывает сложные процессы доступа к данным и обеспечивает гораздо более высокий уровень классов и объектов, через которые легко получить доступ к данным. Эти классы скрывают все сложное кодирование для соединения, извлечения данных, запросов данных и манипулирования данными.

ADO.NET – это технология, которая обеспечивает мост между различными объектами управления ASP.NET и внутренним источником данных. В этом уроке мы кратко рассмотрим доступ к данным и их работу.

Извлекать и отображать данные

Для извлечения и отображения данных в ASP.NET требуются два типа элементов управления данными:

Элемент управления источником данных. Он управляет подключением к данным, выбором данных и другими заданиями, такими как подкачка и кэширование данных и т. Д.

Элемент управления представлением данных – связывает и отображает данные и позволяет манипулировать данными.

Элемент управления источником данных. Он управляет подключением к данным, выбором данных и другими заданиями, такими как подкачка и кэширование данных и т. Д.

Элемент управления представлением данных – связывает и отображает данные и позволяет манипулировать данными.

Мы подробно обсудим привязку данных и элементы управления источниками данных позже. В этом разделе мы будем использовать элемент управления SqlDataSource для доступа к данным и элемент управления GridView для отображения и манипулирования данными в этой главе.

Мы также будем использовать базу данных Access, которая содержит подробную информацию о книгах .Net, доступных на рынке. Имя нашей базы данных – ASPDotNetStepByStep.mdb, и мы будем использовать таблицу данных DotNetReferences.

Таблица имеет следующие столбцы: идентификатор, заголовок, AuthorFirstName, AuthorLastName, тема и издатель.

Вот снимок таблицы данных:

Давайте прямо перейдем к действию, сделаем следующие шаги:

(1) Создайте веб-сайт и добавьте SqlDataSourceControl в веб-форму.

(2) Нажмите на параметр «Настроить источник данных».

(3) Нажмите кнопку «Новое соединение», чтобы установить соединение с базой данных.

(4) После настройки соединения вы можете сохранить его для дальнейшего использования. На следующем шаге вас попросят настроить оператор выбора:

(5) Выберите столбцы и нажмите «Далее», чтобы завершить шаги. Наблюдайте кнопки WHERE, ORDER BY и Advanced. Эти кнопки позволяют вам предоставить предложение where, order by clause и указать команды вставки, обновления и удаления SQL соответственно. Таким образом, вы можете манипулировать данными.

(6) Добавьте элемент управления GridView на форму. Выберите источник данных и отформатируйте элемент управления с помощью параметра Автоформат.

(7) После этого отформатированный элемент управления GridView отображает заголовки столбцов, и приложение готово к выполнению.

Asp доступ к источнику данных

Обновлен: Ноябрь 2007

Веб-приложения обычно получают доступ к источникам данных для сохранения и извлечения динамических данных. Можно создать код для доступа к данным с помощью классов из пространства имен System.Data (обычно называемого ADO.NET) и пространства имен System.Xml . Такой подход широко использовался в предыдущих версиях ASP.NET.

Однако ASP.NET также позволяет выполнить привязку данных декларативно. При этом для наиболее распространенных сценариев данных, включая приведенные ниже, код вообще не требуется:

Выбор и отображение данных.

Сортировка, разбиение по страницам и кэширование данных.

Обновление, вставка и удаление данных.

Фильтрация данных с помощью параметров среды выполнения.

Создание сценариев с отношением «основной/подробности» с использованием параметров.

ASP.NET включает два типа серверных элементов управления, используемых в декларативной модели привязки данных: элементы управления источником данных и элементы управления привязки данных. Эти элементы управления контролируют базовые задачи, необходимые веб-модели без сведений о состоянии для отображения и обновления данных на веб-страницах ASP.NET. В результате пользователю не требуется понимать особенности жизненного цикла запроса страницы для выполнения привязки данных.

Элементы управления источником данных — это элементы управления ASP.NET, управляющие задачами подключения к источнику данных и чтения и записи данных. Элементы управления источником данных не отрисовывают пользовательский интерфейс, а вместо этого выступают как посредник между конкретным источником данных (например базой данных, бизнес-объектом или файлом XML) и другими элементами управления на веб-странице ASP.NET. Элементы управления источником данных предоставляют широкие возможности для извлечения и изменения данных, включая запросы, сортировку, разбиение по страницам, фильтрацию, обновление, удаление и вставку. ASP.NET содержит следующие элементы управления источником данных:

Элемент управления источником данных

Позволяет работать с базой данных Microsoft Access.

Позволяет использовать запросы LINQ на веб-странице ASP.NET через декларативную разметку, чтобы извлечь данные из объекта данных и изменить их. Поддерживает автоматическое создание команд выбора, обновления, вставки и удаления. Элемент управления также поддерживает сортировку, фильтрацию и разбиение по страницам.

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

Используется со структурой переходов веб-узла ASP.NET. Дополнительные сведения см. в разделе Общие сведения об структуре переходов веб-узла ASP.NET .

Позволяет работать с управляемыми поставщиками данных ADO.NET, что предоставляет доступ к базам данных Microsoft SQL Server, OLE DB, ODBC и Oracle.

Позволяет работать с файлом XML, что особенно удобно для иерархических серверных элементов управления ASP.NET, например элемента управления TreeView или Menu .

Элементы управления источником данных можно также расширять для поддержки дополнительных поставщиков хранилища данных доступа.

Дополнительные сведения о элементах управления источником данных см. в разделе Общие сведения об элементах управления источниками данных .

Элементы управления с привязкой к данным отрисовывают данные для запрашивающего обозревателя как разметку. Элемент управления с привязкой к данным может привязываться к элементу управления источником данных и автоматически получать данные в нужно время во время жизненного цикла запроса страницы. Элементы управления с привязкой к данным позволяют использовать преимущества, предоставляемые элементом управления источником данных, включая сортировку, разбиение по страницам, кэширование, фильтрацию, обновление, удаление и вставку. Элемент управления с привязкой к данным подключается к элементу управления источником данных с помощью свойства DataSourceID .

ASP.NET содержит элементы управления с привязкой к данным, описанные в следующей таблице.

Элементы управления списка

Отображают данные в списках различных форматов. К элементам управления списка относятся элементы управления BulletedList , CheckBoxList , DropDownList , ListBox и RadioButtonList .


Отображает объявления на странице в виде изображения, которое пользователи могут щелкнуть для перехода по URL-адресу, связанному с этим объявлением.

Отображает данных в таблице. Отрисовка каждого элемента выполняется с использованием заданного шаблона элемента.

Отображает по одной записи за раз в табличном макете и позволяет изменять, удалять и вставлять записи. Можно также пролистывать записи.

Похож на элемент управления DetailsView , но позволяет задать для каждой записи макет произвольной формы. Элемент управления FormView похож на элемент управления DataList , действующий для отдельной записи.

Отображает данные в таблице и включает поддержку изменения, обновления, удаления, сортировки данных и разбиения их по страницам без использования кода.

Элемент управления GridView заменяет элемент управления DataGrid ASP.NET, доступный в предыдущих версиях ASP.NET.

Позволяет задать макет данных с использованием шаблонов. Поддерживает автоматическую сортировку, изменение, вставку и удаление операций. Можно также включить разбиение по страницам с помощью соответствующего элемента управления DataPager .

Отображает данные в иерархическом динамическом меню, которое может содержать подменю.

Отображает данные в списке. Отрисовка каждого элемента выполняется с использованием заданного шаблона элемента.

Отображает данные в иерархическом дереве развертываемых узлов.

Примечание.

Элемент управления DataGrid , доступный в ASP.NET версии 1.0 и версии 1.1, был заменен на элемент управления GridView , обладающий расширенными возможностями сортировки и изменения данных, а также разбиения их по страницам. Это никак не повлияет на работу существующих страниц, использующих элемент управления DataGrid . Как и другие элементы управления элемент управления DataGrid был усовершенствован для взаимодействия с элементами управления источником данных.

Примечание.

Элемент управления ListView заменяет элемент управления Repeater и элемент управления DataList . Это никак не повлияет на работу существующих страниц, использующих эти элементы управления. Элемент управления ListView упрощает реализацию многих общих сценариев.

Asp доступ к источнику данных

Обновлен: Ноябрь 2007

В данном пошаговом руководстве описано создание простого серверного веб-элемента управления привязки данных в ASP.NET версии 2.0. В ASP.NET 2.0 модель источника данных позволяет связывать элементы управления привязки данных с элементами управления источника данных, поддерживая тем самым перемещение стандартных операций с данными (разбиение по страницам, сортировка и удаление) за пределы элемента управления с привязкой к данным. Указанная модель данных создает более гибкий элемент управления с привязкой к данным для разработчиков страниц и обеспечивает возможность повторного использования. Кроме того, модель источника данных ASP.NET 2.0 поддерживает привязку непосредственно к объекту сбора данных. Дополнительные сведения о разработке пользовательских элементов управления с привязкой к данным для модели данных ASP.NET 2.0 см. в разделе Разработка пользовательских серверных веб-элементов управления с привязкой к данным для ASP.NET 2.0 .

В рамках данного пошагового руководства будет создан элемент управления с привязкой к данным, который можно связать с элементом управления источника данных или другим объектом, реализующим интерфейс IEnumerable .

В данном пошаговом руководстве представлены следующие задачи:

Создание веб-узла для тестирования пользовательского элемента управления с привязкой к данным и динамической компиляцией.

Создание класса элемента управления с привязкой к данным, расширяющего базовый класс DataBoundControl . В этом классе отображается столбец таблицы, представляющий связанные данные. Далее представлен общие сведения о возможностях класса элемента управления с привязкой к данным.

Переопределение метода базового класса элемента управления с привязкой к данным PerformSelect . Задачи, выполняемые в рамках данного метода, вызывают извлечение данных.

Метод с единственным параметром типа IEnumerable для получения возвращенных данных. В рамках метода может выполняться любая необходимая обработка данных. На последнем этапе вызывается метод PerformDataBinding , используемый для запуска связывания данных.

Переопределение метода PerformDataBinding . В рамках данного метода выполняется перечисление извлеченных данных и добавление дочерних элементов управления для представления данных.

Регистрация элемента управления в файле Web.config.

Тестирование элемента управления в веб-странице ASP.NET.

Компиляция элемента управления, чтобы можно было распределить его как двоичный код.

Тестирование скомпилированного пользовательского серверного элемента с привязкой данных.

Можно использовать динамическую компиляцию ASP.NET для тестирования элемента управления на странице без компиляции его в сборку. Файлы с исходным кодом из каталога App_Code динамически компилируются в корне веб-узла ASP.NET. Поэтому к классам в файлах с исходным кодом в каталоге App_Code можно обращаться из страниц без ручной компиляции в сборки.

Примечание.

Каталог App_Code недоступен в ASP.NET 1.0 и 1.1. Использование каталога App_Code для исходного тестирования элемента управления является необязательным. Основные действия по созданию серверного элемента управления совпадают с действиями в более ранних версиях ASP.NET в соответствии с описанием в разделе «Компиляция элемента управления в сборку».

Создание веб-узла для тестирования пользовательских элементов управления с привязкой к данным

Создайте веб-узел с именем ServerControlsTest.

Можно создать узел в IIS как виртуальный каталог с именем ServerControlsTest. Дополнительные сведения о создании и настройке виртуального каталога IIS см. в разделе Практическое руководство. Создание и настройка виртуальных каталогов в IIS 5.0 и 6.0 .

Создайте каталог App_Code непосредственно в корневом каталоге веб-узла (корень веб-приложения).

В данном разделе будет создан класс элемента управления с привязкой к данным, расширяющий класс DataBoundControl . В новом элементе управления связанные данные представлены в виде таблицы из одного столбца.

Создание класса SimpleDataBoundColumn

В папке App_Code folder создайте класс под названием SimpleDataBoundColumn.cs или SimpleDataBoundColumn.vb.

Добавьте следующий код к файлу класса:

Рассмотрение кода

Класс SimpleDataBoundColumn создается на основе базового класса с привязкой к данным DataBoundControl . На базе этого базового класса создаются расширенные свойства DataSourceID , DataSource и свойства с привязкой к данным DataMember . Полученные свойства позволяют разработчику страницы указать источник данных и элемент данных, к которому привязан пользовательский элемент управления.

Свойство DataTextField , добавленное к классу SimpleDataBoundColumn, показывает, как можно добавить дополнительные пользовательские свойства привязки к данным. После того, как разработчик страницы задает свойство DataTextField , новое значение сохраняется в состоянии представления. Также, если элемент управления уже запущен, вызывается метод OnDataPropertyChanged . Это приводит к повторной привязке данных к элементу управления с тем, чтобы элемент мог использовать новый параметр свойства с привязкой к данным.

Требуется переопределенный метод DataBind , который содержит логику перечисления объектов в связанном источнике данных и создания дочерних элементов управления. Необходимо выполнить следующие задачи в элементах управления ASP.NET 2.0 с привязкой к данным в переопределенном методе DataBind , как показано в классе SimpleDataBoundColumn:

Проверяется, указано ли значение false для свойства IsBoundUsingDataSourceID , чтобы определить, задан ли источник данных в свойстве DataSource .

Если связываемые данные указаны в свойстве DataSource , вызывается метод OnDataBinding , который позволяет привязать элемент данных, заданный в свойстве DataSource .

Метод GetData вызывается для извлечения объекта DataSourceView , связанного с элементом управления с привязкой к данным.

Вызывается метод Select извлеченного объекта DataSourceView , который позволяет запустить процесс извлечения данных и выбрать метод обратного вызова OnDataSourceViewSelectCallback для обработки полученных данных.

Чтобы указать, что задачи по извлечению данных метода PerformSelect завершены, свойству RequiresDataBinding присваивается значение false , а затем вызывается метод MarkAsDataBound .

Метод обратного вызова OnDataSourceViewSelectCallback получает извлеченные данные. Необходимо, чтобы данный метод принял один параметр типа IEnumerable . Также, если того требует пользовательский элемент управления, необходимо выполнить обработку данных. Пользовательский элемент управления в данном примере использует исходные данные, поэтому обработка данных не требуется. На последнем этапе вызывается метод PerformDataBinding для запуска процесса привязки данных.

В переопределении метода PerformDataBinding создаются все дочерние элементы, представляющие данные. Коллекция данных нумеруется и создается новый объект TableCell для каждого элемента данных. Если задано свойство DataTextField , то оно используется для определения поля данных, привязанного к свойству ячейки Text . В противном случае применяется первое поле.


К пользовательской коллекции элемента управления SimpleDataBoundColumn Controls добавляется родительский элемент управления Table . Любой элемент управления, добавляемый к коллекции элемента Controls , автоматически отображается при выполнении унаследованного метода Render .

Дополнительные сведения об обязательных реализациях серверных веб-элементах управления с привязкой к данным см. в разделе Разработка пользовательских серверных веб-элементов управления с привязкой к данным для ASP.NET 2.0 .

Создание префикса тега

Примечание.

Обратите внимание, что атрибут assembly , указывающий имя сборки элемента управления в директиве @ Register , отсутствует. Если атрибут assembly отсутствует, ASP.NET предполагает, что сборка динамически компилируется из исходного файла в каталоге App_Code.

Кроме использования директивы @ Register на каждой странице .aspx, разработчик страницы также может указать префикс тега и сопоставление пространства имен в файле Web.config. Это полезно, если пользовательский элемент управления будет использоваться на нескольких страницах в веб-приложении. В следующей процедуре описывается, как указать сопоставление префикса тега в файле Web.config.

Добавление сопоставления префикса тега в файле Web.config

Если веб-узел еще не содержит файла Web.config, создайте его в корневой папке веб-узла.

При создании нового файла Web.config добавьте следующую разметку XML в файл, а затем сохраните его. Если узел уже содержит файл Web.config, добавьте к нему следующий выделенный элемент.

Примечание.

Запись префикса тега должна быть потомком раздела controls , который должен размещаться в разделе pages section, который в свою очередь должен быть потомком раздела system.web .

Выделенный раздел показывает запись префикса тега, которая сопоставляет префикс тега «aspSample» пространству имен Samples.AspNet.Controls.CS или Samples.AspNet.Controls.VB .

После того как в файле конфигурации указано сопоставление префиксов тегов, можно декларативно использовать элемент управления SimpleDataBoundColumn (как ) на любой странице веб-узла.

Примечание.

В ASP.NET 1.0 и 1.1 сопоставление префиксов тегов задается в директиве @ Register на каждой странице, которая использовала пользовательский элемент управления.

Создание страницы для использования пользовательского элемента управления с привязкой к данным

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

Создание страницы, использующей пользовательский элемент управления с привязкой данных

В веб-узле создайте файл под названием TestSimpleDataBoundColumn.aspx.

Скопируйте следующую разметку в файл TestSimpleDataBoundColumn.aspx и сохраните его.

Запустите страницу SimpleDataBoundColumnTest.aspx.

Внесите изменения в исходный код для настраиваемого элемента управления. Например, запишите дополнительную строку, добавьте эту строку в кода конец метода RenderContents :

Обновите страницу SimpleDataBoundColumnTest.aspx в своем обозревателе.

Изменения элемента управления будут отображены на странице даже без компиляции элемента управления.

Каталог App_Code позволяет протестировать элемент управления без компиляции. Однако, если элемент управления должен быть распределен в качестве объектного кода между другими разработчиками, его компиляция необходима. Кроме того, элемент управления невозможно добавить на панель элементов визуального конструктора, пока он не скомпилирован в сборку.

Компиляция элемента управления в сборку

Задайте переменную PATH среды Windows компьютера, чтобы включить путь в установку .NET Framework с помощью этих шагов:

В Windows щелкните правой кнопкой Мой компьютер , выберите Свойства , Дополнительно , и нажмите кнопку Переменные среды .

В списке Системные переменные дважды щелкните переменную Path .

В поле Значение переменной добавьте точку с запятой (;) в конец существующих значений текстового поля и введите путь установки платформы .NET Framework. Обычно платформа .NET Framework устанавливается в папку установки Windows в \Microsoft.NET\Framework\ номер_версии .

Нажмите кнопку ОК , чтобы закрыть все диалоговые окна.

Из каталога App_Code запустите следующую команду, которая содержит исходные файлы, созданные на предыдущем этапе данного пошагового руководства. В результате будет создана сборка Samples.AspNet.Controls.CS.dll или Samples.AspNet.Controls.VB.dll в том же каталоге App_Code.

Параметр компилятора /t:library указывает компилятору создать библиотеку вместо исполняемой сборки. Параметр /out предоставляет имя для сборки, а параметр /r — список сборок, связанных с текущей сборкой.

Примечание.

Чтобы сохранить этот пример автономно, пошаговое руководство предложит создать сборку с одним элементом управления. Как правило, руководства по разработке платформы .NET Framework рекомендуют не создавать сборки, содержащие всего несколько классов. Для простого развертывания нужно создать столько сборок, сколько возможно.

Использование TagPrefixAttribute для предоставления сопоставления префиксов тегов и пространств имен

Ранее было показано, как разработчик может указать префикс тега на странице или в файле Web.config. При компиляции элемента управления можно предложить префикс тега по умолчанию, который должен использовать визуальный конструктор для данного элемента. Это осуществляется путем добавления атрибута уровня сборки System.Web.UI TagPrefixAttribute . Атрибут TagPrefixAttribute полезен, так как предоставляет префикс тега для использования его визуальным конструктором, если конструктор не обнаружил сопоставление префиксов тегов в файле Web.config или в директиве @ Register на странице. Префикс тега регистрируется со страницей при первом двойном щелчке элемента управления в панели элементов или перетаскивании его с панели элементов на страницу.

Если решено использовать атрибут TagPrefixAttribute , можно указать его в отдельном файле, скомпилированном с элементами управления. По соглашению об именах файл получает AssemblyInfo. languageExtension , например, AssemblyInfo.cs или AssembyInfo.vb. В следующей процедуре описано, как указать метаданные TagPrefixAttribute .

Примечание.

Если не указать TagPrefixAttribute в сборке элемента управления, и разработчик страницы не укажет сопоставление префиксов тегов и пространства имен на странице или в файле Web.config, визуальный конструктор должен будет создать префикс тега по умолчанию. Например, Visual Studio 2005 создаст собственный тег (например, cc1 ) для элемента управления при его перетаскивании из панели элементов.

Добавление сопоставления префиксов тегов с помощью TagPrefixAttribute

Создайте файл с именем AssemblyInfo.cs или AssemblyInfo.vb в каталоге исходного кода и добавьте следующий код в файл.

Атрибут префикса тега создает сопоставление между пространством имен Samples.AspNet.Controls.CS или Samples.AspNet.Controls.VB и префиксом aspSample .

Перекомпилируйте все исходные файлы с помощью команды компиляции, которая использовалась ранее (с внедренным ресурсом или без него).

Для проверки откомпилированной версии пользовательского элемента управления следует обеспечить страницам веб-узла доступ к сборке элемента управления.

Обеспечение доступа к сборке элемента управления для веб-узла

Создайте каталог Bin в корневом каталоге веб-узла.

Перетащите сборку элемента управления (Samples.AspNet.Controls.CS.dll или Samples.AspNet.Controls.VB.dll) из каталога App_Code в каталог Bin.

Удалите файл с исходным кодом элемента управления из каталога App_Code.

Если этого не сделать, тип элемента управления будет существовать в откомпилированной сборке и в сборке, динамически созданной ASP.NET. Это создаст неоднозначную ссылку при загрузке элемента управления, и любая страница, на которой используется этот элемент управления, создаст ошибку компилятора.

Сборка, созданная в рамках данного пошагового руководства, считается закрытой, поскольку она должна быть размещена в каталоге Bin веб-узла ASP.NET, чтобы поддерживать использование указанного элемента управления на страницах веб-узла. К этой сборке нельзя обратиться из других приложений, если ее копия также не установлена этими приложениями. Если создаются элементы управления для общих приложений, размещенных на узле, как правило, элементы управления упаковываются в закрытую сборку. Однако если элементы управления создаются для использования в специальной среде размещения или создается набор сборок, который поставщик Интернет-услуг делает доступными всем их потребителям, элементы управления нужно упаковать в общие сборки (строго поименованные), установленные в глобальный кэш сборок. Дополнительные сведения см. в разделе Работа со сборками и глобальным кэшем сборок .

Затем следует изменить сопоставление префикса тега, созданное в файле Web.config, указав имя сборки.


Изменение сопоставления префикса тега в файле Web.config

Добавьте в файл Web.config атрибут assembly к элементу add tagPrefix :

Атрибут assembly определяет имя сборки, содержащей элемент управления. Элемент add tagPrefix сопоставляет префикс тега с сочетанием пространства имен и сборки. Если сборка динамически генерируется компонентом ASP.NET из исходных файлов в каталоге App_Code, атрибут сборки не требуется. Если атрибут сборки не используется, ASP.NET загружает тип элемента управления из сборок, созданных динамически в каталоге App_Code.

Просмотр страницы, использующей пользовательский элемент управления

Загрузите страницу SimpleDataBoundColumnTest.aspx в своем обозревателе, указав следующий URL-адрес в адресной строке:

Если элемент управления используется в визуальном конструкторе, таком как Visual Studio 2005, можно добавить элемент управления в панель элементов, перетащить его с панели элементов в рабочую область конструирования и получить доступ к свойствам и событиям в обозревателе свойств. Дополнительно, в среде Visual Studio 2005 элемент управления имеет полную поддержку в представлении исходного кода разработчика страницы и в редакторе кода. Это включает завершение операторов в блоке script и поддержку обозревателя свойств, когда разработчик щелкает тег элемента управления.

Примечание.

Во многих визуальных конструкторах можно добавлять пользовательские элементы управления в панель элементов конструктора. Подробные сведения см. в документации конструктора.

С помощью данного простого серверного элемента управления с привязкой к данным были показаны основные действия, необходимые для создания пользовательского элемента управления, который может быть эффективно и легко привязан к внешнему источнику данных. Начиная с данного момента можно приступать к изучению платформы Visual Studio для создания более сложных пользовательских серверных элементов управления. Для дальнейшего исследования можно выполнить следующие действия.

Изучить введение в общую архитектуру и ее реализации, относящиеся к разработке пользовательских серверных элементов управления с привязкой к данным. Дополнительные сведения см. в разделе Разработка пользовательских серверных веб-элементов управления с привязкой к данным для ASP.NET 2.0 .

Исследовать существующие классы серверных элементов управления с привязкой данных, которые можно расширять и настраивать. Общие сведения о доступных серверных веб-элементов управления представлен в разделе Общие сведения о серверных веб-элементах управления ASP.NET с привязкой к данным . Дополнительные сведения о классах серверных веб-элементов управления см. в следующих разделах справки: GridView , DetailsView , FormView , Repeater и DataList .

Узнать об атрибутах метаданных, которые можно применять в пользовательских серверных элементах управления с привязкой к данным и их компонентах для предоставления информации, используемой средствами разработки. Дополнительные сведения см. в разделе Атрибуты метаданных для специализированных серверных элементов управления .

Создать конструктор элементов управления для добавления возможностей в режиме разработки, шаблонов или стилей. Пример пользовательского конструктора элемента управления с привязкой данных см. в разделе HierarchicalDataBoundControlDesigner и Пошаговое руководство. Создание базового конструктора элементов управления для серверного веб-элемента управления . Общие сведения об элементе управления ASP.NET см. в разделе Общие сведения о конструкторах элементов управления ASP.NET .

Поработать с примерами конструктора пользовательских элементов управления с привязкой к данным. Дополнительные сведения можно получить в классе HierarchicalDataBoundControlDesigner .

IT-ЗАМЕТКИ

Инструменты пользователя

Инструменты сайта

Содержание

Элементы управления источниками данных включают любые элементы управления, реализующие интерфейс IDataSource. Среда .NET Framework поддерживает следующие элементы управления источниками данных.

Все элементы управления источниками данных можно найти на вкладке Data (Данные) панели инструментов в Visual Studio.

SqlDataSource

SqlDataSource представляет подключение к базе данных, использующее поставщика ADO.NET.

Источник данных выбирается установкой имени поставщика. Вот SqlDataSource для подключения к базе данных SQL Server:

Следующий шаг предполагает применение требуемой строки соединения — без нее установка соединения невозможна.

После того, как установлены имя поставщика и строка подключения, следующий шаг состоит в добавлении логики запроса, которую SqlDataSource использует, когда подключится к базе данных.

Извлечение записей

Каждый созданный элемент управления SqlDataSource можно использовать для выполнения одного запроса. Дополнительно можно также добавить соответствующие команды для удаления, вставки и обновления строк.

Теперь необходимо у связующего элемента вызвать свойства DataSourcelD и передать туда ID нашего SqlDataSource.
Потом установите ListBox.DataTextField в столбец, который должен отображаться (в этом случае EmployeelD).

Параметризованные команды

Трюк состоит в том, что запрос записан с использованием параметра. Параметры всегда отмечаются символом @, в рассматриваемом случае это @City. Определить можно столько параметров, сколько необходимо, но каждый должен быть отображен на отдельное значение. В этом примере значение параметра @City выбирается из свойства IstCities.SelectedValue.

Дополнительные сведения о типах параметров

Примечание.
Источник Управляющий дескриптор Описание
Свойство элемента управления Свойство другого элемента управления на странице
Строковое значение запроса Значение из текущей строки запроса
Значение состояния сеанса Значение, сохраненное в текущем сеансе пользователя
Значение cookie-набора Значение из любого cookie-набора, присоединенного к текущему запросу.
Значение профиля Значение из текущего пользовательского профиля
Переменная формы Значение, отправленное странице от элемента управления вводом.
Значение маршрута Значение из маршрутизированного URL

Иногда может понадобиться модифицировать значение параметра перед его использованием.
В SqlDataSource имеется ряд событий, специально предусмотренных для этой. Например, реагируя на событие Selecting, можно заполнить параметры для операции выбора. Аналогично можно использовать события Updating, Deleting и Inserting при обновлении, удалении и вставке записи. В обработчиках этих событий через свойство SqlDataSourceSelectingEventArgs.Command имеется доступ к команде, которая должна быть выполнена, и ее можно модифицировать вручную.

Обратите внимание, что для обращения к параметру в коллекции Parameters перед его именем должен быть добавлен символ @.

Обработка ошибок

Чтобы сделать это, необходимо обработать событие источника данных, которое происходит немедленно после ошибки. Если выполняется запрос, то это будет событие Selected. Если же выполняется операция обновления, удаления или вставки, то понадобится обработать события Updated, Deleted или Inserted. (Если вы не хотите предоставлять настраиваемые сообщения об ошибках, можно обработать все эти события в одном обработчике.)

В обработчике ошибок можно получить доступ к объекту исключения через свойство SqlDataSourceStatusEventArgs.Exception.

Чтобы предотвратить дальнейшее распространение ошибки, просто установите значение свойства SqlDataSourceStatusEventArgs.ExceptionHandled в true. Затем отобразите на веб-странице соответствующее сообщение об ошибке, чтобы проинформировать пользователя о том, что команда не была завершена.

Обновление записей

Извлечение данных — это только полдела. SqlDataSource также может применять изменения. Единственная ловушка в том, что не все элементы управления поддерживают обновление. Так, например, простой ListBox не предоставляет никакой возможности пользователю редактировать значения, удалять существующие элементы или вставлять новые.

Команды InsertCommand, DeleteCommand и UpdateCommand определяются таким же образом, как команда для свойства SelectCommnad — с использованием параметризованного запроса или вызова хранимой процедуры.

Например, вот как выглядит элемент SqlDataSource, который определяет базовую команду обновления каждого столбца:

Чтобы разрешить редактирование, установите свойство GridView.AutoGenerateEditButton в true. Слева в экранной таблице появится новый столбец. GridView использует этот столбец для отображения ссылок для управления процессом редактирования.

Можно создать аналогичные параметризованные команды для DeleteCommand и InsertCommand. Чтобы разрешить удаление и вставку, вы должны добавить столбец к Gr >

Строгая проверка параллелизма

Для противостояния такого рода проблемам можно реализовать строгую проверку параллелизма. Один из способов сделать это — создать команду, которая выполняет обновление, только если каждое полей совпадает, используя более подробную конструкцию WHERE.

Для начала необходимо сообщить SqlDataSource о том, что нужен доступ к исходным значениям, установив свойство SqlDataSource .Conf lictDetection в Conf lie tOpt ions. Compare Al lvalues вместо Conf lie tOpt ions. Over writeChanges (принятого по умолчанию).

Второй шаг состоит в том, чтобы сообщить SqlDataSource, как следует именовать параметры, хранящие исходные значения. По умолчанию исходные значения получают те же имена параметров, что и измененные значения. Фактически они переопределяют исходные значения параметров. Чтобы предотвратить такое поведение, необходимо установить свойство SqlDataSource.OldValuesParameterFormatString. Это свойство принимает строку, содержащую заполнитель <0>, где <0>указывает на имя исходного параметра. Например, если вы установите OldValuesParameterFormatString в original! 0> (как это часто делается), то параметры, хранящие исходные значения, получат префикс original_. Например, @FirstName станет @original _ FirstName, a @LastName — @original_LastName, как в команде обновления, показанной выше. Зная эти детали, вы можете создать полностью сконфигурированный SqlDataSource, который реализует этот прием:

Недостатки SqlDataSource

Сопровождение больших приложений. Каждая страница, которая обращается к базе данных, нуждается в собственном наборе элементов управления SqlDataSource. Это может превратить задачу поддержки в настоящий кошмар, особенно если есть несколько страниц, использующих один и тот же запрос (и каждая из них требует дублирующего экземпляра SqlDataSource). В основанном на компонентах приложении вы будете использовать более высокоуровневую модель. Веб-страницы будут взаимодействовать с библиотекой доступа к данным, которая содержит все детали, касающиеся базы данных.

Недостаток гибкости. Каждая задача доступа к данным требует отдельного элемента SqlDataSource. Если вы хотите предоставить пользователю несколько способов просмотра запрошенных данных, то это может просто «утопить» страницу в объектах доступа к данным — по одному для каждого варианта команды. В таком случае страница быстро усложниться.


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

ObjectDataSource

Элемент ObjectDataSource позволяет создавать декларативную ссылку между элементами управления веб-страницы и компонентом доступа к данным, который запрашивает и обновляет их. ObjectDataSource ощутимо более гибок и может работать с широким диапазонов разнообразных компонентов. Однако для того, чтобы использовать его, класс доступа к данным должен подчиняться нескольким правилам.

Извлечение записей

Интерфейс компонента

В ObjectDataSource определены свойства SelectMethod, DeleteMethod,UpdateMethod и InsertMethod, используемые для связывания класса доступа к данным с различными задачами. Каждое свойство принимает имя метода класса доступа к данным. В рассматриваемом примере нужно просто разрешить извлечение данных, для чего установить значение свойства SelectMethod:

GetEmployees() возвращает массив объектов EmployeeDetails. Эти объекты отвечают критериям ObjectDataSource — они предоставляют все данные записи через общедоступные свойства.

Вспомните, что класс EmployeeDB использует блоки обработки ошибок, чтобы обеспечить корректное закрытие соединений, но он не перехватывает исключений. (Наилучшая практика проектирования состоит в том, чтобы позволить исключениям уведомлять веб-страницу, которая затем может решить, как лучше всего информировать пользователя.) Ошибки, связанные с ObjectDataSource, можно обработать таким же образом, как это делалось в случае SqlDataSource: во-первых, обработать события Selected, Inserted, Updated и Deleted; во-вторых, проверить на наличие исключений и, в-третьих, пометить их как обработанные.

Использование параметров методов

Ранее уже было показано, как использовать SqlDataSource для выполнения параметризованных команд. То же самое возможно с Ob jectDataSource, если предоставить подходящий метод выборки, принимающий один или более параметров. Затем каждый параметр можно отобразить на значение из элемента управления, строковый аргумент запроса и т.п.

Чтобы попробовать это, можете воспользоваться методом EmployeeDB.GetEmployee(), извлекающим запись об отдельном сотруднике по идентификационному номеру. Вот объявление этого метода:

Имя, определенное для параметра, в точности должно соответствовать имени параметра, использованному в методе. Когда ObjectDataSource вызывает этот метод, он применяет рефлексию для его анализа и проверяет имена параметров, чтобы определить порядок аргументов. Эта система позволяет перегружать методы, поскольку ObjectDataSource в состоянии корректно идентифицировать перегрузку, которую вы хотите использовать, на основе количества переданных параметров и их имен.

Обновление записей

Элемент ObjectDataSource предоставляет того же рода привязку обновляемых данных, что и SqlDataSource. Первый шаг связан с указанием метода UpdateMethod, который должен быть общедоступным методом экземпляра того же класса:

Сложность связана с обеспечением правильной сигнатуры для метода UpdateMethod. Предположим, что вы создаете экранную таблицу, которая отображает список объектов EmployeeDetails. Вы добавляете столбец со ссылками редактирования. Когда пользователь фиксирует изменения, GridView заполняет коллекцию ObjectDataSource.UpdateParameters — по одному параметру для каждого свойства класса EmployeeDetails, включая E’mployeelD, FirstName, LastName и TitleOfCourtesy. Затем ObjectDataSource ищет метод по имени UpdateEmployeeO в классе EmployeeDB. Этот метод должен иметь те же параметры с теми же именами. Это значит, что приведенный ниже метод подходит:

А следующий метод не подходит, потому что имена не совпадают в точности:

Показанный далее метод также не подходит, т.к. имеет дополнительный параметр:

Алгоритм сравнения метода не учитывает регистр и не рассматривает порядок или типы параметров. Он просто пытается найти метод с правильным количеством параметров и теми же именами. До тех пор, пока такой метод присутствует, обновление может быть выполнено автоматически, без какого-либо дополнительного кода.

Обновление с помощью объекта данных

Одна проблема, связанная с методом UpdateEmployee (), показанным в предыдущем примере, заключается в том, что его сигнатура несколько неуклюжа — требуется один параметр для каждого свойства объекта. Глядя на определение класса EmployeeDetails. имело бы смысл создать UpdateEmployeeO, который бы использовал его и получал всю необходимую информацию из объекта EmployeeDetails. Вот пример:

ObjectDataSource поддерживает такой подход. Однако чтобы применить его, необходимо установить в DataObjectTypeName полное имя класса, который должен использоваться. Ниже показано как это работает:

. Часть 1

Интерфейс к базе данных с помощью ASP

Постановка задачи

Предположим, перед нами стоит задача создания газетного сайта, причем некоторые из его читателей должны иметь право пополнять его новыми статьями, снабжаемыми фотографиями непосредственно с самого сайта и без программирования. Предположим также, что такой сайт должен иметь возможности удаления статей, их поиска, а также сортировки. С первого взгляда может показаться, что решение такой задачи не под силу начинающему программисту ASP, однако, как вы скоро увидите, это далеко не так.

Для начала давайте все-таки разберемся, что же от нас требуется. По сути, необходимо создать базу данных всех статей, подготовить несколько HTML-форм для загрузки статей на сервер, их поиска, сортировки, удаления и, наконец, отображения результата.

Я почти уверен, что подобная задача актуальна применительно практически к любому сайту, тем более что подобным образом (разве что без возможностей поиска, сортировки и удаления) работает большинство гостевых книг (guestbook).

Что нам понадобится

Для реализации вышеизложенной задачи нам потребуется персональный компьютер с Microsoft Windows NT или Windows 2000 (можно и Workstation, и Server), установленный IIS (Internet Information Server), какой-нибудь HTML-редактор (советую использовать Macromedia Dreamweaver), Microsoft Access (версии 95, 97 или 2000) и самый обычный текстовый редактор.

Создание и подготовка базы данных

Прежде всего создадим базу данных статей, для чего:

  • запустим приложение Microsoft Access;
  • любым из известных способов создадим новую базу данных. Назовем ее «Articles»;
  • в созданной базе данных создадим таблицу с именем, например «Articles»;
  • пользуясь инструментом «Конструктор», определим поля нашей таблицы и типы принимаемых ими значений (рис. 1);
  • заполним таблицу несколькими статьями в соответствии с созданными полями (рис. 2);
  • сохраним базу данных в файле «ArticlesDB.mdb».

Далее необходимо прописать нашу базу данных в соответствующем разделе источников данных системы, для этого:

  • запустим программу-конфигуратор источников данных (Data Sources ODBC) — Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC;
  • перейдем во вкладку «System DSN» и создадим новый источник данных, нажав на «Add…»;
  • в появившемся списке драйверов выберем драйвер баз данных Microsoft Access — «Microsoft Access Driver (*.mdb)» и нажмем на «Finish»;
  • в строке «Data Source Name» зададим имя нашей базы данных, например «Articles» (это то имя, по которому мы в дальнейшем будем обращаться к ней);
  • нажмем на «Select…», выберем подготовленный нами файл «ArticlesDB.mdb» и нажмем «OK».

В результате в списке источников данных в вашей системе появится строка, представленная на рис. 3.

Оформляем главную страницу (index.asp)

С ASP работать очень просто. Для этого надо всего лишь вставить текст скрипта ASP в пару тэгов . В остальном ASP-файл ничем не отличается от HTML-файла (за исключением, пожалуй, расширения). Комментарии в HTML, как известно, вставляются в пару тэгов , в ASP же закомментировать строку можно при помощи символа ‘ (апостроф) в ее начале.

Теперь давайте разберемся. Во-первых, как вы наверняка заметили, ASP-код легко сочетается с HTML-тэгами; в этом его достоинство. Так, к примеру, строка Response.Write Link & «
» отображает на экране браузера клиента подготовленное сервером значение переменной Link и HTML-тэг
, то есть перевод строки. Особый интерес вызывает переменная rs. Для искушенных программистов сразу скажу — это указатель. Однако в ASP с целью облегчения работы начинающих указатели маскируются. Здесь не встретишь громоздких С’шных конструкций, типа «я знаю, что ты знаешь, что я знаю», или, выражаясь программистским языком, указатель на указатель… Однако сделано это так искусно, что гибкость программирования при этом не теряется, нет лишь прямой работы с указателями, а только работа с помощью специальных функций, скрывающих от программиста рутину и защищающих указатели от некорректных действий. Таким образом, выражение rs.Fields («Article»).value означает значение поля «Article» текущего значения указателя на элемент базы данных (в нашем случае статей) и содержит текст статьи, которая соответствует текущей позиции указателя на все статьи. Переход к следующему элементу базы (смещение указателя) выполняется с помощью инструкции Rs.MoveNext. В приведенном выше примере это не делается, а попросту формируется ссылка на текст статьи в виде ее названия и отображается комментарий самой первой статьи, соответствующей результату запроса. Давайте попробуем отобразить все статьи нашей базы данных на главной странице в виде HTML. И еще, обратите особое внимание на директиву:

Она по сути формирует ссылку на файл, содержащий шаблон отображения самой статьи, причем передает идентификатор статьи ему в качестве параметра. Полностью файл шаблона приведен в приложении к настоящей статье, а механизм его работы может быть кратко представлен следующим образом:

Первая строчка скрипта шаблона HTML присваивает переменной TheID значение, переданное ссылкой с использованием метода Request.QueryString. Далее открывается база данных, из которой читается статья (запись), соответствующая идентификатору, переданному из главного скрипта (index.asp).

Создаем главную страницу

Таким образом в таблицу в цикле будут добавляться ряды со ссылками на статьи и с аннотациями, пока не будут отображены все статьи из базы данных. Следует обратить внимание на переменную Cnt. По окончании цикла она будет содержать число обработанных статей (рядов таблицы).

Язык структурированных запросов — SQL

Настала пора разобраться с тем, что таится за строчками:

По сути, именно за этими двумя строчками кроется работа с нашей базой данных: первая представляет собой текстовую строку с запросом к базе данных (текстовые строки в ASP записываются в двойных кавычках); вторая — содержит директиву выполнения этого запроса с одновременным присвоением результата переменной (указателю на записи в базе данных). В рамках настоящей статьи мы не будем рассматривать SQL (Structured Query Language) во всех деталях, а остановимся лишь на тех его операторах, без понимания которых дальнейшая работа будет невозможна. Для тех, кому этого покажется недостаточным, советую посетить отобранные мною сайты с детальной документацией по SQL.

Для полноценной работы нам необходимо познакомиться с четырьмя операторами этого мощного языка, предназначенного специально для работы с базами данных.

DELETE удаляет те ряды из «Имя Таблицы», которые удовлетворяют условию, определенному в «Определении», и возвращает число удаленных рядов. Если выполнить команду DELETE без условия WHERE, то все ряды указанной таблицы будут удалены. В этом случае DELETE возвратит 0. Ключевое слово LOW_PRIORITY откладывает выполнение операции DELETE до завершения работы чтения из таблицы других клиентов.

SELECT используется для извлечения рядов (записей) из одной или более таблиц. Выражение_Select определяет столбцы таблицы, значения которых необходимо извлечь. Все ключевые поля должны быть заданы в строгой последовательности. К примеру, выражение HAVING должно следовать за любым выражением GROUP BY и до любого выражения ORDER BY.

Выражение_Select можно заменить псевдонимом (alias) с помощью ключевого слова AS. Псевдоним используется в качестве идентификатора имени столбца и может быть использован наряду с ключевыми словами ORDER BY или HAVING.

Выражение HAVING может относиться к любому столбцу или псевдониму в Выражении_Select. Оно применяется к запросу в последнюю очередь, непосредственно перед посылкой данных клиенту. SELECT . INTO OUTFILE ‘имя_файла’ заносит отобранные записи в файл. Файл создается непосредственно на сервере и не может «уже существовать» (одна из основных причин такого механизма заключается в предотвращении случайного «затирания» различных важных файлов).


INSERT используется для добавления новых записей в существующую таблицу. Допустимо две формы использования INSERT.

Первая форма — INSERT . VALUES — вставляет ряды на основании заданных значений. Вторая форма — INSERT . SELECT — вставляет ряды, выбранные из другой таблицы.

Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Ключевое слово IGNORE в команде INSERT позволяет избегать вставки повторяющихся строк (используется в сочетании с ключевыми словами PRIMARY или UNIQUE). Для второй формы INSERT INTO . SELECT операция не может содержать выражения ORDER BY. Таблица, в которую производится добавление записей, не может присутствовать в выражении FROM части SELECT запроса потому, что запрещено производить выделение из той же самой таблицы, в которую производится вставка.

REPLACE служит для редактирования содержимого таблицы и работает в точности как INSERT, за исключением того, что если старая запись в таблице имеет то же значение, что и записываемая, то старая запись удаляется прежде, чем добавляется новая.

UPDATE обновляет поля существующей таблицы новыми значениями. Выражение SET показывает, какие поля (столбцы) должны быть изменены, и значения, которые должны быть им присвоены. Выражение WHERE, если оно есть, указывает, какие ряды должны быть обновлены. В противном случае операция применяется ко всем рядам таблицы. Ключевое слово LOW_PRIORITY откладывает выполнение операции до завершения работы чтения из таблицы других клиентов. Выражения UPDATE выполняются слева направо.

Обновляет значение поля Password в таблице WAPassword, записывая в поле, чей идентификатор ID равен 1 значение ‘passw’.

Увеличивает значение поля counter таблицы Счетчик на 1.

Удваивает поле age, а затем прибавляет 1 к его значению в таблице persondata.

Что такое Global.asa

Global.asa позволяет выполнять определенные скрипты в начале работы клиентской сессии или при инициализации IIS. Примером тому может служить простейший счетчик числа посещений сайта. Более того, допустимо использовать множественные файлы Global.asa. Однако следует помнить, что ASP-скрипт ищет самый близкий (расположенный в том же каталоге) файл Global.asa и использует именно его.

По сути, этот файл может содержать четыре скрипта: первый будет выполняться при инициализации службы IIS/PWS (Application_OnStart), второй — при остановке службы IIS/PWS (Application_OnEnd) (обычно эти первые два скрипта отрабатывают в процессе перезагрузки компьютера), и еще два скрипта выполняются дополнительно при инициализации сессии пользователя (Session_OnStart) и по ее окончании (Session_OnEnd). Данная схема очень сильно напоминает пары «конструктор-деструктор». Неспроста всякая переменная, которая должна быть использована (например, в текущей сессии), может быть инициализирована в Session_OnStart с тем, чтобы быть использованной в процессе работы сессии, она же уничтожается (обнуляется) в Session_OnEnd.

Global.asa не может содержать тэгов HTML. Недопустимо использование JavaScript. Не рекомендуется писать файл Global.asa с помощью каких-либо HTML-редакторов, для этого гораздо лучше использовать NotePad. И еще один совет: прежде чем вставлять скрипт в файл Global.asa, попробуйте его в работе в обычном ASP-файле.

Пример файла Global.asa

Добавляем новую статью (UploadForm.asp и Upload2DBS.asp)

Теперь, когда мы разобрались с SQL, можно приступать к добавлению новой статьи, причем делать мы это будем прямо с сайта, а если быть точнее — непосредственно с HTML-формы. Для этого сначала создадим файл с самой формой и определим скрипт-реакцию на подтверждение (кнопку «Publish the article!»). (Предполагается, что читатель знаком с азами построения HTML-форм, поэтому мы рассмотрим этот процесс, не вдаваясь в детали построения форм.)

Прежде всего следует уточнить задачу на этом этапе. Итак, очевидно следующее:

  • на загрузку статьи с сайта должен иметь право не каждый (следовательно, желательно предусмотреть пароль для доступа к этой функции);
  • у каждой статьи есть определенная тема (рубрика), причем она не может быть произвольной, а должна выбираться из списка;
  • список можно хранить непосредственно в HTML-файле и, каждый раз изменяя его, изменять сам файл. Это самый простой и быстрый способ;
  • однако для того, чтобы позволить динамически изменять и пополнять этот список, рекомендуется держать его в базе данных. Это позволит пользователям произвольным образом изменять его содержимое и не потребует переделки формы. Для простоты сначала рассмотрим вариант со встроенным («жестко прошитым») рубрикатором.

Как видим, передача управления осуществляется благодаря директиве ACTION=»http://localhost/Upload2DBS.asp»> в тэге формы. Тем самым указывается скрипт-ответ на реакцию пользователя после нажатия на кнопку «Publish the article!». Теперь остановимся на селекторе рубрик. Как уже отмечалось, желательно перевести его содержимое в базу данных. Для этого в нашей базе данных (файл ArticlesDB.mdb) создадим новую таблицу с именем, к примеру «Topics», в которой с помощью конструктора определим всего одно поле — «Topic» типа «текст». Далее заполним эту таблицу произвольными значениями нашего рубрикатора и отсортируем полученный список в алфавитном порядке. После чего следует заменить тэг

Теперь давайте разберемся с самой сутью дальнейшей работы. Что же должен делать наш скрипт-реакция?

Во-первых, следует позаботиться о том, чтобы все обязательные поля (а они отмечены звездочкой) были введены. Наиболее правильным способом проверки этого является скрипт, написанный на любом языке описания скриптов (например, JavaScript), который будет проверять, введены ли значения обязательных полей. Для этого достаточно добавить в определение тэга формы параметр onsubmit=»preprocess();», где preprocess() — имя функции-скрипта, который и будет осуществлять проверку. Здесь как нельзя кстати видно преимущество языков описания сценариев (JavaScript, Jscript, VBScript) перед ASP. ASP выполняется на стороне сервера, а перегружать связь «клиент-сервер» простой проверкой типа «введены ли значения», согласитесь, неправильно. Однако специально в целях обучения мы будем делать это с помощью ASP.

И еще. Прежде чем приступить к выполнению нашей задачи, следует сказать еще об одной небольшой проблеме: когда мы будем вставлять в ячейку базы данных текст, его форматирование (даже самое простое) не сохранится, и в дальнейшем его невозможно будет корректно отобразить на HTML-странице, поскольку поле Memo хранит неформатированную строку текста. Чтобы избежать этого, следует написать функцию, которая позволит производить примитивное HTML-форматирование введенного текста статьи, перед тем как записать его в базу данных. Другими словами, в самом примитивном случае (хотя бы для того, чтобы сохранить исходную разбивку на строки) функция должна вставлять символы конца строки там, где во входном потоке имеются символы переноса строк.

Удаляем статью (RemoveForm.asp и Rem.asp)

Было бы неплохо предусмотреть возможность удаления статьи с нашего сайта: во-первых, она может устареть, а во-вторых, в процессе ее подготовки не исключены ошибки или опечатки. Останавливаться на форме удаления статьи не будем, скажем лишь, что она содержит единственные элементы с запросом пароля и кнопкой удаления (см. файл RemoveForm.asp), и сразу перейдем к рассмотрению непосредственно процесса удаления:

Особое внимание следует уделить первым двум строкам. Они получают значение глобальной переменной текущего сеанса (сессии) работы со значением идентификатора текущей статьи (в нашем случае удаляемой), которая была инициализирована (файл ArtTmp.htm) следующей строкой:

Таким образом, в текущий скрипт передается в качестве параметра сеансовая переменная с идентификатором текущей статьи, которую необходимо удалить. Имеется в виду, что ссылка на удаление присутствует в странице с шаблоном (файл ArtTmp.htm) и удаляемая статья является текущей.

Организуем поиск (SearchForm.asp и SearchDBS.asp)

Как известно, без поиска навигация в сколь-нибудь солидной базе данных невозможна в принципе. Попробуем организовать поиск статьи по ее реквизитам, причем постараемся организовать булев (логический) поиск, соединяя отдельные значения критериев поиска с помощью логики «И/ИЛИ».

Опять же не заостряя внимание на поисковой форме (файл SearchForm.asp), перейдем непосредственно к самому процессу поиска:

Самое интересное происходит при формировании запроса к базе из составляющих:

В зависимости от введенной пользователем комбинации исходных полей из этих компонентов формируется окончательный запрос, в частности для полей «Author» и «Title». Возможны четыре случая: оба поля пусты, пусто первое поле, пусто второе поле и оба поля не пусты. Соответствующая строка SQL-запроса в каждом из этих случаев формируется по-своему. То же самое относится к состоянию селекторов рубрик статей и порядку их сортировки. При добавлении той или иной подстроки учитывается состояние «радиокнопок» И/ИЛИ и соответствующая подстрока добавляется в SQL-запрос, предваряясь логическим элементом «and» или «or» соответственно. После того как окончательный запрос сформирован, он выполняется, а результирующая страница формируется исходя из списка статей, удовлетворяющих критериям.

Полный код приведенных в статье примеров, включая файл базы данных, находится на нашем CD-ROM.

И в заключение

Напоследок хотелось бы сориентировать разработчиков ASP-страниц в мире документации и инструментальных средств. Дело в том, что автор настоящей статьи провел не один день сидя в Интернете в поисках всевозможных исходных текстов, документации, инструментальных средств и теоретических основ этого мощного средства.

Среди множества инструментальных средств, служащих для облегчения создания ASP-приложений, выделяются два: Easy ASP © Eric Banker, 2000 и Microsoft InterDev из комплекта Microsoft Visual Studio 6.0. Первый — очень удобное, несложное и небольшое средство для быстрого создания ASP-приложений. Второй представляет собой мощный, тяжеловесный интегрированный пакет в духе Microsoft для разработки всевозможных Web-приложений.

Временная версия EasyASP 4.0 находится на нашем CD-ROM.

Среди огромного числа сайтов мною были отобраны те, посещение которых было для меня особенно полезным и с которыми хотелось ознакомить читателей, а именно:

http://www.15seconds.com/issue/000210.htm — создание динамичных JavaScript-скриптов с помощью ASP и интерфейсов к базам данных

http://www.alphasierrapapa.com/iisdev/ — сайт, посвященный разработке серверов IIS с помощью ASP

http://www.websiteresources.com/ — огромная база исходных текстов всевозможных Web-программ

Примеры ASP-кода для профессионалов

http://www.asptoday.com/search.asp?category=ASP Tricks — масса полезных советов для начинающих программировать на ASP

http://www.oreilly.com/catalog/aspnut/ — замечательная книга популярнейшей серии «In a Nutshell» всемирно известного издательства O’REILLY «ASP in a Nutshell A Desktop Quick Reference». На сайте бесплатно размещена одна из глав книги

http://www.chilisoft.net/ — версии ASP для различных платформ можно скачать с этого сайта

http://www.willcam.com/sql/ — введение в структурированный язык запросов SQL

SQL Reference and Example Site — хорошо структурированный материал по SQL

Asp доступ к источнику данных

Этот текст предназначен для тех, кто никогда не имел дела с ASP и вообще смутно себе представляет возможности программирования на стороне сервера. Я ставил себе задачу создать у читателя общее представление о предмете. Отдельные неточности при этом менее важны — пожалуйста, громко не ругайтесь.

Общие сведения

ASP (Active Server Pages) – это мощная технология от Microsoft, позволяющая легко разрабатывать приложения для WWW. ASP работает на платформе Windows NT и IIS (Internet Information Server), начиная с версии 3, хотя вроде есть реализации на других платформах. ASP – это не язык программирования, это внутренняя технология, позволяющая подключать программы к Web-страницам. Основа успеха ASP – простой скриптовый язык (Visual Basic Script или Java Script) и возможность использования внешних COM-компонент.

Как это все происходит?


Вы пишете программу и складываете в файл на сервере. Браузер клиента запрашивает файл. Файл сначала интерпретируется сервером, на выходе производится HTML-код. Этот HTML посылается клиенту. Файлы с программами имеют расширение .asp. Файлы asp – это обычные текстовые файлы, содержащие исходные тексты программ. Файлы делаются с помощью любого текстового редактора. Каталог, в котором размещены файлы asp должен иметь права на выполнение, так как сервер исполняет эти файлы, когда браузер их запрашивает. Собственно программы пишутся на любом скриптовом языке, который установлен в системе. По умолчанию поддерживаются VBScript и JavaScript. Можно доустановить другие (например, Perl). Если ничего специально не указывать используется VBScript. В дальнейшем будем ссылаться только на него. Программные фрагменты заключаются в скобки . Можно ставить открывающую скобку в начале файла, закрывающую – в конце, все что между ними – программа на Visual Basic’е.

Какие средства есть для программирования?

Web – нормальная среда программирования, если правильно понять, что есть что. В VBScript есть все нормальные конструкции структурного программирования (if, while, case, etc). Есть переменные (описывать не обязательно, тип явно не задается). Поддерживаются объекты. Работа с ними обычная – Object.Property, Object.Method. Есть ряд встроенных объектов (Request, Response, Session, Server, Connection, Recordset). Можно доустанавливать другие компоненты (скачивать, покупать, программировать), например для работы с электронной почтой.

Вывод

Понятия «экран», куда можно выводить данные нет. Все, что надо показать пользователю, выбрасывается в выходной поток на языке HTML. Браузер пользователя интерпретирует этот HTML. Для упрощения вывода существует объект Response . Вывод осуществляется с помощью метода Write .

Так производится запись во внутренний буфер объекта Response. Когда скрипт заканчивает работу, весь буфер выдается клиенту. Надо заметить, что клиент получает «чистый» HTML, таким образом программы на ASP не зависят от клиентского ПО, что очень важно. Если внутри выводимой строки нужно использовать кавычку, кавычка удваивается. Другие методы и свойства Response позволяют управлять выводом. Так Response.Buffer регулирует, получает ли клиент данные по мере из записи в Response, или все сразу по завершении исполнения страницы. Метод Response.Redirect перенаправляет браузер на другую страницу. Чтобы им пользоваться, нельзя до него на странице использовать Response.Write.

Программа на ASP не может явно спросить пользователя о чем-то. Она получает данные из других страниц, либо через URL. Передаваемые параметры помещаются во входной поток и доступны через объект Request . Чтобы передать переменную var в программу test.asp , надо написать:

Чтобы из программы получить значение этой переменной, надо написать:

Несколько переменных разделяется знаком &:

Кроме того, чтобы задавать параметры в URL, можно воспользоваться формами HTML. В вызывающей странице пишем так:

Так это выглядит:

При этом пользователь увидит форму из одного поля ввода (var1), в нем будет значение по умолчанию «default». Второе поле (var2) будет невидимо и будет передавать всегда фиксированное значение «var2value». Кнопка «Submit Form» завершает заполнение формы и передает все переменные на test.asp (action). Если method=»get», переменные передаются через URL (test.asp?var1=default&var2=var2value). Если method=»post», передаются вместе с запросом так, что внешне передача переменных не заметна. В вызываемой программе безразлично, какой метод изпользовался (почти). Если у вас нет специальных аргументов за метод GET, используйте метод POST.

Формы

Формы HTML используются для организации диалога с пользователем. Поддерживаются стандартные элементы управления. Все многообразие задается немногими тэгами:

  • INPUT (с параметром TYPE=)
  • SELECT
  • TEXTAREA

Описание – в документации по HTML.

Взаимосвязь между отдельными страницами

Обычно сервер WWW не хранит состояние приложения, т.е. все запросы взаимонезависимы, и нет стандартного способа понять, что несколько запросов пришли от одного и того же пользователя. Но это очень нужно для разработки полноценных приложений и является одной из главных проблем разработки Web-приложений.

Один из методов решения этой проблемы — cookies . Пользователю при первом обращении выдается специальный идентификатор, после этого браузер пользователя предъявляет этот идентификатор при каждом обращении, и сервер может распознать, что это тот же самый пользователь. Пользователь может отключить cookies, в этом случае этот метод не работает.

ASP, используя cookies, предоставляет программисту более простое средство — объект Session (сессия). Сессия стартует, когда новый пользователь обращается к любому asp-файлу приложения. Сессия заканчивается при отсутствии активности пользователя в течение 20 минут, либо по явной команде. Специальный объект Session хранит состояние сессии. Туда можно записывать переменные, которые доступны из любой страницы в этой сессии. Записать данные в этот объект можно просто:

Считать потом еще проще:

Сессия, таким образом, – это еще один метод передачи данных между страницами. Одна страница пишет данные в сессию, другая – берет потом оттуда.

Наряду с объектом Session существует объект Application . Если сессия создается для каждого нового пользователя, до Application существует в единственном экземпляре, и может использоваться всеми страницами приложения.

Управление приложением

Программисту предоставляется возможность реагировать на 4 события: старт/стоп приложения и старт/стоп каждой сессии. Для реализации этих событий предназначен файл global.asa , который должен располагаться в корневом каталоге приложения. Вот его примерный скелет:

Нужно «просто» вписать Ваш код на соответствующее место. Нужно заметить, что отлаживать код для global.asa довольно непросто, так как он выполняется при очень специфических обстоятельствах (к примеру при старте или остановке сервера).

Использование внешних компонент

Если на сервере установлены дополнительные компоненты, их можно использовать из ASP. Стандартные объекты (например из библиотек ADO (Connection и Recordset) и Scripting (Dictionary, FileSystemObject)) доступны всегда. Установка новой компоненты обычно состоит в копировании dll-файла в каталог на сервере и ее регистрации с помощью программы regsvr32.exe. [В COM+ используется своя процедура инсталляции объектов, это однако не влияет на использования объектов.]

Создать экземпляр объекта можно так:

Class.Object указываются в документации на компоненту. В переменной var запоминается ссылка на созданный экземпляр объекта. Когда объект не нужен, ссылку нужно обнулить с помощью команды:

Пожалуйста всегда обнуляйте все ссылки на объекты, когда они больше не нужны. Теоретически это должно происходить автоматически при завершении процедуры/страницы, однако в стандартной сборке мусора есть определенные «проблемы».

В остальном использование компоненты зависит от самой этой компоненты.

Работа с базами данных

Из ASP можно легко и просто работать с любыми базами данных. Это делается через две промежуточные технологии: ODBC и ADO.

ODBC позволяет организовать доступ к любым базам данных через унифицированный интерфейс с помощью языка SQL. Специфика конкретных СУБД учитывается при помощи специальных драйверов БД. Такие драйверы существуют для всевозможных СУБД (в частности SQL Server, Oracle, Access, FoxPro). Поддержка ODBC обеспечивается на уровне операционной системы Windows (NT). Настройка – через Control Panel/ODBC. Базовым понятием является источник данных или data source. Источник данных – это совокупность сведений о базе данных, включая ее драйвер, имя компьютера и файла, параметры. Чтобы пользоваться базой надо создать источник данных для нее. Важно, чтобы источник данных был «системным», в отличии от «пользовательского». После этого надо лишь знать имя источника данных. [В настоящее время ODBC отступает перед натиском технологии OLE DB. На практике это однако практически ничего не изменяет. Вместо имени источника данных нужно использовать Connection String, в которой указывается имя ODBC-драйвера и все его параметры.]

ADO – это совокупность объектов, доступных из ASP, позволяющих обращаться к источнику данных ODBC [или OLE DB]. Фактически нужны лишь 2 объекта – Connection , представляющий соединение с базой данных и Recordset , представляющий набор записей, полученный от источника. Сначала необходимо открыть соединение, потом к нему привязать Recordset, потом, пользуясь методами Recordset’а, обрабатывать данные. Вот пример:

Если команда SQL не возвращает данных, recordset не нужен, надо пользоваться методом Conn. Execute (SQL_COMMAND).

Если Вы хотите вызывать хранимые процедуры сервера БД с параметрами, нужно воспользоваться объектом Command , который в свою очеред содержит объекты Parameter .

Методики программирования, советы


Описание переменных

VBScript — очень нетребовательный к программисту язык. Так он не требует описывать переменные и не содержит явных типов данных. Все переменные принадлежат одному типу Variant . Из-за отсутствия описаний могут произойти очень трудно обнаруживаемые ошибки. Одна опечатка может стоить полдня поисков.

Однако, есть возможность явно потребовать описания переменных. Для этого первой строкой в ASP-файле нужно написать Option Explicit . После этого обращение к переменной, которая не была объявлена с помощью Dim , вызывает ошибку с указанием номера строки.

Кстати, где расположены описания Dim в процедуре — совершенно не важно. Они могут стоять как до использования переменной, так и после, и даже в цикле. Видимо они отрабатываются препроцессором. Явно задать тип переменной с помощью Dim Var as Typ , как в Visual Basic, все равно нельзя.

Чередование ASP/HTML

Если нужно выдать большой кусок HTML, можно не пользоваться Response.Write. Если в asp-файле встречается кусок текста вне скобок , он трактуется просто как HTML, который надо вывести. Пример:

Обработка ошибок

Для отслеживания ошибок используется специальный объект Err . Он устанавливается в ненулевое значение, если предыдущая команда породила ошибку. Ее можно проверять с помощью If, и таким образом реагировать на ошибки. Чтобы из-за ошибки не прерывалось выполнение программы, в начале нужно включить команду

Включение других файлов

Можно выносить повторяющийся код в отдельный файл, и подключать к разным другим по мере необходимости с помощью команды include . Это очень удобно, если вы хотите вынести повторяющийся код в отдельный файл и использовать снова и снова в разных страницах:

Важно: все includes в тексте отрабатываются до исполнения файла. Т.е. даже если include стоит внутри if, то сначала будут включены все includes во всех ветках, и только потом, во время исполнения, будет принятно решение, какую ветку выполнять. Т.е. следующий код не дает условного включения файлов:

Обработка форм



Если надо что-то спросить у пользователя и на основании этого что-то сделать, в простейшем случае создается два файла: один с формой, второй – с ее обработчиком. Обработчик выполняет все действия. Пример:

Рекурсивная обработка форм

Удобный метод состоит в том, чтобы сбор данных и обработку осуществлял один и тот же файл. Для этого пишется asp, в котором есть разные разделы. Специальная переменная отвечает за выбор раздела при запуске. Пример:

Переменные HTTP

Запрос от браузера, кроме запрашиваемой страницы несет еще некоторые данные. Эти данные, например, IP-адрес клиента, доступны через специальные переменные объекта Request. IP-адрес – Request(«REMOTE_ADDR»). Другие — см.документацию (ASPSamp\Samples\srvvar.asp).

Переадресация

Очень легко написать на ASP скрипт, который будет производить некоторые расчеты, и в зависимости от результатов переадресовывать браузер на разные URL (например, подставлять нужный баннер). Делается это так:

Только надо следить, чтобы до выполнения команды redirect ничего не было записано в Response (даже коментарии HTML).

Электронная почта

Одна из часто встречающихся задач – отправить электронную почту с Web-страницы. На первый взгляд, можно просто написать

Но это приводит к тому, что при отправке формы делается попытка на клиентской машине запустить почтовую программу и создать новое сообщение с данными формы. Если это не получается (почтовая программа не настроена, пользователь не отправил почту, и т.д.) — письмо и не будет отправлено. Гораздо надежнее работает серверное решение.

Для этого существуют внешние компоненты, есть и бесплатные. Например, компонента Jmail от Dimac. Все, что для нее нужно – это адрес SMTP-сервера. Вот пример ее использования:

ASP NET.MVC Урок 3. Работа с БД

Цель урока: Изучить основные принципы работы с базой данных. Краткое описание реляционной модели баз данных. Работа с базой данных (создание таблиц, связей в VS 2012). Команды INSERT, UPDATE, DELETE, SELECT. Использование LinqToSql и Linq. Создание репозитария, IRepository, SqlRepository.

Что такое БД
Таблицы

Таблица состоит из столбцов и строк. Столбцы имеют свойства – имя, тип данных.
Таблицы должны обладать следующими свойствами:

  • у таблицы есть имя (уникальное)
  • нет двух одинаковых строк
  • столбцы имеют разные наименования (нет двух одинаковых столбцов)
  • порядок строк в таблице произвольный (т.е. не надо учитывать порядок строк, если не задана сортировка)

Структуру таблицы можно записать в таком виде:

  • Имя столбца
  • Тип данных для этого столбца
Связи

Между таблицами существуют связи (relation). Для установки связи необходимо иметь следующее:

  • Первичный ключ – это набор столбцов (атрибутов) таблицы, однозначно определяющих уникальность строки. Обычно это одно поле, называется ID. Оно является автоикрементным, т.е. при попытке добавления записи, там автоматически вставляется 1, 2, 3, 4… n+1, где n – это значение последнего добавленного ID.
  • Внешний ключ – это набор столбцов (атрибутов) таблицы, которые однозначно определяют уникальность строки в другой таблице. Опять же это обычно одно поле, названное [Имя таблицы]ID. Но не является автоинкрементным.
  • Прописана связь между первичным ключом и внешним ключом.

Связи бывают трех типов:

  • Один-к-одному. Т.е. одной строке в таблице соответствует одна строка в другой таблице. Это редко используется, но используется. Например, в одной таблице данные о пользователе, а в другой — дополнительные данные о том же пользователе. Такой вариант необходим, чтобы манипулировать, по необходимости, меньшим количеством данных.
  • Один-ко-многим. Одной строк в таблице A соответствует одна или несколько строк в таблице B. Но одной строке в таблице B соответствует только одна строка в таблице A. В этом случае в таблице B существует внешний ключ, который однозначно определяет запись в таблице A.
  • Многие-ко-многим. Одной строке в таблице А соответствует одна или несколько строк в таблице В, что истинно и в обратном. В данном случае создается дополнительная таблица со своим первичным ключом, и двумя внешними ключами к таблице A и B.

Сейчас разберемся, как это делать.

Создание простой схемы в БД

Создадим БД в VS 2012:

Назовем её LessonProject, и добавим 3 таблицы Role User и UserRole.
Создадим таблицу Role:

Для строковых значений используем тип nvarchar(n), где n – максимальная длина строки, обычно используется от 50 до 500. Для больших текстовых строк используется nvarchar(MAX).

Устанавливаем первичный ключ:

Задаем для ID автоинкремент:

Подобным образом создаем таблицу User:

Поле Тип поля
ID int
Email nvarchar(150)
Password nvarchar(50)
AddedDate datetime
ActivatedDate datetime (null)
ActivatedLink nvarchar(50)
LastVisitDate datetime (null)
AvatarPath nvarchar(150) (null)

Создаем таблицу UserRole:

Поле Тип поля
ID int
UserID int
RoleID int

Добавляем новую связь, нажав Add. Добавление связей происходит в таблице, где находятся внешние ключи. Раскрываем вкладку Tables and Columns и выставляем таблицу с первичным ключом, и выбираем внешний ключ в текущей таблице UserRole.

В свойствах INSERT And UPDATE Specification выставляем On Update/On Delete свойства Cascade:

Это необходимо для того, чтобы при изменении/удалении столбца из таблицы Role все связанные с этой строкой строки таблицы UserRole должны быть изменены или удалены.

Аналогичную связь мы устанавливаем с таблицей User.

Таким образом, таблицы Role и User имеют отношения многие ко многим через таблицу UserRole. Т.е. у одного пользователя может быть больше одной роли, и одна и та же роль может быть у нескольких пользователей.

SELECT, INSERT, UPDATE, DELETE.

В реляционных базах данных используется язык запросов SQL.

Есть 4 основные команды для манипулирования данными — SELECT, INSERT, UPDATE, DELETE

SELECT – для выбора данных и таблиц.
Пример:

INSERT — Добавление строк в таблицу
Пример:

UPDATE – изменение значений в таблице
Пример:

DELETE – удаление строк из таблицы
Пример:

LinqToSQL и Linq.

Создадим проект LessonProject.Model для работы с БД типа ClassLibrary.
Добавляем LINQ to SQL Classes тип, называем LessonProejctDb.dbml

Открываем объект, выделяем все таблицы и мышкой переносим на холст:

Собственно, с помощью таких простых действий мы получаем:

  • классы, готовые к использованию в работе с БД
  • визуальное отображение таблиц и связей

Добавим несколько данных в таблицу Role и User:

1 admin Админ
2 customer Заказчик
1 chernikov@gmail.com 123456 1/1/2012 12:00:00 AM NULL 123456 NULL NULL
2 chernikov2@gmail.com 123456 1/1/2012 12:00:00 AM NULL 123456 NULL NULL


ID UserID RoleID
1 1 1
2 1 2
3 2 2

Создадим консольный проект Lesson3 и подключим LessonProject.Model. Добавим сборку System.Configuration и System.Data.Linq. Проинициализируем context и выведем данные о ролях:

Для добавления строки в Role делаем так:

Для удаления строки в Role делаем так:

Для изменения данных делаем так:

Для манипуляции данных используется язык запросов Linq. Мы рассмотрим только некоторые основные функции Linq. Linq применяется для типов реализующий интерфейс IQueryable<>

    .Where() – основная функция фильтрации. Возвращает тип IQueryable. Условие внутри должно возвращать булево значение (bool).

  • .FirstOrDefault() — .First(), .Single(), .SingleOrDefault() – получают первую или единственную запись. Если записи нет, то FirstOrDefault() или SingleOrDefault() возвращают null (на самом деле, значение по умолчанию этого типа [default(int)], например).
    – получаем первую (или не получаем) роль названную «Менеджер».
  • .Take() – выбирает N первых записей
    – выберет 4 первые записи
  • .Skip() – пропускает выбор N первых записей
    – пропустит первые 2 и выберет 3 следующие записи
  • .OrderBy() – сортирует по возрастанию. А также OrderByDescending(), ThenBy(), ThenByDescending(). Лямбда-выражение должно возвращать тип int, по которому и будет происходить сортировка.
    – сортирует по порядку
  • .Count() – получает количество записей
    – количество записей
  • .Any() – существует одна или больше записей по данному условию
    var rolesExist = context.Roles.Where(p => p.Name == «Менеджер»).Any() – есть ли запись такая
  • . Select() – возвращает IQueryable произвольного типа, может быть даже dynamic:
    – получаем динамический тип, сформированный на основе Role.
  • .SelectMany() – возвращает объединение всех IQueryable типов внутри выборки:
    – получаем все UserRole из роли, названной «Менеджер»
  • .Distinct() – удаляет дубликаты
    – все пользователи с ролью названной «Менеджер»
  • Примечание: First(), FirstOrDefault(), Single(), SingleOrDefault(), Any(), Count() – могут применять параметр, соответствующий Where() , тем самым, можно сокращать запись:

    Создание репозитория IRepository, SqlRepository.

    Собственно с БД мы уже можем работать, только теперь нужно отделить модель данных от конкретной реализации, т.е. наши контроллеры про context и System.Data.Linq вообще не должны ничего знать.

    Для этого создадим интерфейс IRepository, где будет дан доступ к данным, а также выведены методы для создания, изменения и удаления этих данных.

    Реализацию назовем SqlRepository. Так как мы с данным контекстом SqlRepository не хотим особо связывать, то добавим Ninject модуль в проект LessonProject.Model:

    Создадим класс SqlRepository:

    Прежде, чем реализовать доступ ко всем таблицам, создание, удаление и изменение, подумаем о том, что файл этот будет выглядеть громадным и неуклюжим. Таким кодом будет управлять тяжело физически. Так что сделаем отдельную папку SqlRepository и SqlRepository класс сделаем partial, а в папке создадим реализации интерфейса IRepository, разбитые по каждой таблице. Назовем файл Role:

    Небольшой проект содержит от 10 до 40 таблиц, большой проект от 40, и всё это хотелось бы как-то автоматизировать. Создадим несколько сниппетов, для IRepository и для SqlRepository. Сниппеты – это уже готовые шаблоны кода, которые вызываются с помощью intelliSence, и позволяют быстро создавать код.

    Сниппеты

    Для IRepository таблиц, создадим table.snippet:

    Для SqlRepository создадим сниппет sqlTable.snippet:

    Для того, чтобы добавить code-snippet. откроем TOOLS -> Code Snippet Manager… (Ctrl-K, B). В окне нажимаем Import и импортируем оба сниппета в My Code snippet:

    Finish, OK.
    Используем для таблиц User и UserRole.

    Осталось прописать только поля для Update [имя таблицы], но это уже меньше работы.

    Proxy

    Как видим, классы, которые мы используем, являются partial, поэтому их можно дополнить. Создадим, подобно SqlRepository, папку Proxy, где будем размещать partial классы. Например, для класса User создадим метод, который автоматически генерирует строку, требуемую для активации пользователя:

    Использование БД в asp.net mvc

    Добавим строку доступа к БД в web.Config:

    Проинициализируем работу с БД в Ninject:

    Применяем InRequestScope(). Т.е. каждый запрос будет использовать отдельный объект SqlRepository. Это позволит избежать коллизий при исполнении.Объявляем IRepository в контроллере:

    Коннект к ODBC — БД по источнику DSN

    13.09.2007, 17:03

    Коннект к InterBase в ASP через ODBC
    Собственно сабж. Может кто подскажет? Пишу приблизительно следующее: Set db =.

    Частенько не могу открыть ODBC-коннект, задрало уже.
    ‘Доброе’ утро. Есть БД на Access 97. Большая. Я к ней создал сайт, все работает. Но, бывает так.

    Как программно создать DSN для ODBC?
    Как программно создать DSN для ODBC?

    Можно ли программировать ODBC соединение без DSN
    Нельзя ли присоединении к различными источниками данных через ODBC не использовать DSN — хлопотно.

    13.09.2007, 17:57 2 13.09.2007, 18:58 [ТС] 3 13.09.2007, 19:38 4
    13.09.2007, 19:38
    14.09.2007, 16:13 5

    попробуй тот же самый код, но немного исправленный

    set db = server.createobject(‘adodb.connection’)
    db.open ‘DSN=proba’


    этот код работает всегда и у всех

    15.09.2007, 21:37 6
    15.09.2007, 22:46 [ТС] 7

    —————-
    Файл лежит в wwwroot тамже БД . DSN настроил для Microsoft Access Driver(*.mdb) ни чего там мудренного нет.
    А вот ошибка
    Тип ошибки:
    Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
    [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию
    /Default.asp, line 10

    При все этом я не могу сконектиться ни ко дной ODBC-ной базе — ведь там все точно также DSN настрой и его имя укажи в open.
    В общем измучался я в край. У меня такое подозрений что у меня что то глобальное, либо что то не доставил при установке IIS либо еще что за глюк.
    Может ктото поможет всетаки разобраться в этом простом на первый взгляд вопросе.

    Asp доступ к источнику данных

    Представленная ниже страница, лишь часть огромного сайта посвященного различной компьютерной документации, на сайте собрано более 800 мб информации. Если Вы не нашли в этой статье, то что Вы ищите попробуте посмотреть здесь, cпросить на форуме или поискать необходимую Вам информацию в нашем каталоге ссылок сайтов компьтерной тематики.

    Если же Вы хотите приобрести бумажную копию представленных здесь
    материалов, обращайтесь в наш книжный магазин.

    С уважением,
    команда разработчиков eManual.ru

    Азы ADO и ASP

    FileArea.co.il Азы ADO и ASP
    Азы ADO и ASP Майкл Оути
    Листинг 1. Применение объекта ADO Соединение
    Листинг 2. Использование объекта ADO Набор записей
    Листинг 3. Применение объекта ADO Набор записей для вставки строк
    Листинг 4. Обработка ошибок ASP и ADO Основы интерактивного WEB-дизайна

    Программный продукт ASP, название которого в переводе означает Активные страницы сервера (Active Server Pages), обеспечивает написание сценариев серверной части для информационных WEB-серверов компании Microsoft, IIS (Internet Information Server). Впервые корпорация Microsoft ввела ASP в версии IIS 3.0, и продолжила дальнейшую разработку этого продукта в IIS 4.0. ASP представляет собой гибкое динамичное средство создания WEB-страниц и позволяет применять любой язык написания сценариев, удовлетворяющий стандарту ActiveX. Как правило, ASP использует комбинацию из HTML и встроенного VBScript. IIS включает в себя сервер автоматизации OLE, который исполняет VBScript и посылает результаты реализации сценария в формате HTML клиенту, который может иметь только браузер. Так как сценарии ASP выполняются на сервере, то ASP способен работать с любым WEB-браузером, поскольку браузер получает лишь поток страниц HTML. Понимание того, каким образом объекты ADO работают с ASP, и в особенности того, как лучше применять объекты ADO для поиска и модификации данных, может превратить создание динамических WEB-страниц в легкое и приятное занятие.

    Как работает ASP

    Рисунок 1. Обзор взаимодействия ASP и HTML
    1- WEB-сервер
    2- Клиент WEB
    3- Активный сценарий
    4- пример .ASP

    На рисунке 1 изображено, как ASP комбинирует сценарий ActiveX и команды HTML для того, чтобы получить динамическую страницу HTML. Как следует из рисунка, сценарии ASP отличаются от сценариев, базирующихся на браузерах. В традиционных сценариях, основывающихся на браузерах, WEB-сервер посылает страницу HTML, содержащую сценарий ActiveX в браузер клиента, который и отвечает за выполнение сценария. Подход, при котором основной акцент делается на клиентской части приложения, возлагает на нее дополнительный груз обязанностей, что может привести к возникновению проблем, если клиентский браузер не будет в состоянии выполнить сценарий. Напротив, страницы ASP исполняются на WEB-сервере IIS. В ходе исполнения страницы сервер напрямую посылает клиенту команды HTML и все клиентские сценарии, содержащиеся на странице ASP. Но как только сервер доходит до команды серверного сценария ASP, то он исполняет этот сценарий и передает клиенту в форме HTML только полученные в качестве результата выходные данные. Клиент, действия которого сводятся к использованию браузера, не видит разницы между потоком страниц HTML, порождаемым сценарием ASP, и потоком HTML, посылаемым статичными WEB-страницами. Таким образом, написание сценариев для серверной стороны с помощью ASP создает WEB-страницы, которые выступают в качестве исполнителей сценариев. Тот факт, что ASP генерирует только поток страниц HTML, обеспечивает независимость от типа браузера клиента. В силу того, что сервер IIS интерпретирует страницы ASP «на лету», ASP служит идеальным средством для встраивания результатов обработки интерактивных запросов к базе данных в WEB-страницы. Эти возможности обеспечиваются доступом к базе данных SQL Server через ADO непосредственно со страниц ASP.

    Будь то доступ из Internet или из местной сети Intranet, клиенты применяют протоколы HTTP и TCP/IP для связи с WEB- сервером IIS. Когда WEB-клиент запрашивает страницу ASP, WEB-сервер IIS сценарии, находящиеся на этой странице. Для того чтобы получить доступ к базе данных SQL Server, сценарий ASP открывает соединение с SQL Server с помощью одного из объектов Соединение, Команда или Набор записей. Затем использует этот объект для передачи в сервер запроса на доступ к данным. SQL Server может размещаться на том же компьютере, что и WEB-сервер IIS. Однако в силу того, что часто SQL Server используется одновременно сразу несколькими различными приложениями, удобнее разместить его на отдельном компьютере, и обеспечить связь с ним через локальную сеть. После того как ядро SQL Server закончит обработку запроса, оно возвращает результаты объекту ADO из сценария ASP. Затем IIS продолжает исполнять сценарий ASP и отсылает поток страниц HTML обратно клиенту. Поэтому обязательно должно существовать сетевое соединение между WEB-сервером IIS и сервером баз данных SQL Server. Кроме того, на WEB-сервере необходимо установить поставщик OLE DB и библиотеки DLL на период прогона ADO.

    Использование объектов ADO на страницах ASP

    При использовании ADO приложение первым делом пытается применить объекты Соединение, Команда или Набор записей для установления соединения с SQL Server. Объект Соединение следует употреблять для того, чтобы открыть соединение ADO явным образом. Объекты Команда и Набор записей позволяют сделать то же самое динамически. После установления соединения приложение ASP может выполнять команды ADO такого же типа, что и стандартное приложение, написанное на Visual Basic (VB). Эти команды включают исполнение хранимых процедур, открытие и просмотр набора записей, вставку, обновление и удаление данных.

    Для подключения страницы ASP к серверу баз данных SQL Server ADO может применять поставщик OLE DB как для ODBC, так и для SQL Server. Поставщик OLE DB для ODBC позволяет использовать структуру объекта ADO с большинством существующих драйверов ODBC. Но поставщик OLE DB для SQL Server дает возможность подключиться только к SQL Server. Однако с объектами ADO Соединение, Команда и Набор записей возможно применять любой из упомянутых поставщиков. Листинг 1 (написанный на языке VBScript) показывает, как применить поставщик OLE DB для ODBC в целях установления соединения с SQL Server.

    Первое действие, проводимое в листинге 1, это объявление трех переменных, которые будут содержать имя компьютера, на котором размещен SQL Server, и информации для аутентификации SQL Server. Затем сценарий декларирует переменную cn, которую он в последствии будет использовать для объекта ADO Соединение. После объявления в сценарии рабочих переменных метод Формировать (Form) объекта ASP Запрос (Request) присваивает значения всем этим переменным.

    Следующим шагом метод Создать объект (CreateObject) объекта ASP Сервер (Server) создает новый объект ADO Соединение (Connection), который затем присваивается введенной ранее переменной cn. Метод Создать объект (CreateObject) способен порождать экземпляры объектов СОМ. Данный пример иллюстрирует создание экземпляра объекта Соединение ADODB (ADODB.Connection), но его можно аналогичным образом применять и для других структур объектов СОМ, например, для SQL-DMO или Active Directory. (Более подробную информацию об объектах ASP можно найти во врезке «Модель объектов ASP»).

    После этого сценарий присваивает значение строки соединения OLE DB свойству Строка соединения (ConnectionString) объекта Соединение, хранящегося в переменной cn. Это позволяет установить соединение без указания имени источника данных, DSN (Data Source Name). В силу того, что спецификация поставщика OLE DB проводилась без ключевого слова PROVIDER, по умолчанию берется поставщик OLE DB для ODBC. Ключевое слово DRIVER идентифицирует тот драйвер, который предполагается применять в дальнейшем. За ключевым словом SERVER указывается имя компьютера, содержащего SQL Server, с которым намереваются установить соединение. За ключевыми словами UID и PWD содержится информация, необходимая для входа в систему. Ключевое слово DATABASE определяет, что в роли базы данных, используемой по умолчанию, будет выступать база данных pubs. После того как будет присвоено значение строки соединения свойству Строка соединения (ConnectionString) объекта Соединение (Connection), его метод Открыть (Open) установит соединение с SQL Server, удовлетворяющее всем значением параметров, заданных в сценарии.

    Поиск данных с помощью объекта ADO Набор записей ()

    ADO можно применять для поиска данных с помощью объектов Набор записей (Recordset) или Команда (Command). Оба эти объекта способны работать с активным объектом Соединение (Connection), или же создавать новое отдельное соединение. Каждый раз, когда объект Соединение (Connection) или Набор записей (Recordset) устанавливает соединение, начинается новая коммуникационная сессия с SQL Server. Поэтому в том случае, если приложению необходимо выполнить несколько операций, целесообразнее применить объект Соединение (Connection) для открытия связи с SQL Server. Этот объект будет использоваться объектами Команда (Command) или Набор записей (Recordset).

    Листинг 2 демонстрирует применение объекта ADO Набор записей (Recordset) на странице ASP. Первая часть сценария во многом напоминает простой пример установления соединения, приведенный в листинге 1. В сценарии сначала декларируются рабочие переменные, а затем им присваиваются значения. После этого по сценарию создается объект Соединение (Connection), и вслед за ним объект ADO Набор записей (Recordset). На следующем шаге сценария строка соединения присваивается объекту ADO Соединение (Connection), и затем для установления связи с SQL Server вызывается метод Открыть (Open). В соответствии со сценарием свойству Активное соединение (ActiveConnection) объекта Набор записей (Recordset), хранящегося в переменной rs, передается значение объекта активного соединения, cn, и выполняется метод Открыть (Open) объекта Набор записей (Recordset). Первый параметр метода Открыть (Open) содержит простой оператор SQL, который выбирает все столбцы и строки из таблицы stores базы данных Pubs.

    После того как сценарий возвращает результаты обработки запроса, страница ASP создает таблицу HTML, содержащую шесть столбцов. После этого по сценарию столбцы получают заголовки. Сценарий использует стандарт HTML для построения всех заголовков столбцов. Внутри тела таблицы HTML в соответствии с меткой А листинга 2 программный код VBScript организует цикл Do Until. Этот цикл обрабатывает содержимое объекта Набор записей (Recordset), находящегося в переменной rs. Когда сценарий доходит до конца объекта Набор записей (Recordset), свойство rs.EOF получает значение Истина, и цикл завершается.

    Встроенный в страницу ASP сценарий присваивает значения всем столбцам исходя из имени столбца объекта ADO Набор записей (Recordset). В рассматриваемом примере имя столбца, происходящее из таблицы Stores базы данных Pubs идентифицирует каждый пункт коллекции Поля (Fields). Расположенная вслед за этим часть кода VBScript реализует метод MoveNext для перехода к следующей строке в объекте Набор записей (Recordset). Затем оператор Цикл (Loop) возвращает управление в начало цикла Do Until. Когда этот цикл прочитает последнюю строку набора записей, цикл заканчивается и объекты Набор записей (Recordset) и Соединение (Connection), хранившиеся соответственно в переменных rs и cn, закрываются. Результаты работы этой страницы ASP можно видеть на экране 1.

    Экран 1. Просмотр простого объекта ADO Набор записей
    Изменение данных средствами ADO

    ASP и ADO можно применять не только для динамической выдачи WEB-страниц, но и в целях создания WEB-страниц для ввода данных. Такая возможность позволяет создавать основанные на WEB приложения с использованием баз данных, обладающие таким же набором функций работы с базами данных, что и стандартные приложения, разработанные в соответствии с архитектурой клиент-сервер. Объекты ADO Набор записей (Recordset), которые становятся доступными на страницах ASP, предоставляют тот же перечень услуг, что и приложения, написанные на Visual Basic. Как показывает следующий пример, их можно применять для ввода данных. Кроме того, их можно использовать для изменения или удаления данных. Все остальные возможности ADO, такие как способность запускать подготовленные заранее операторы SQL или хранимые процедуры, также имеют место.

    В целях внесения изменений в данные возможности, предоставляемые ASP и ADO, можно комбинировать различными способами. К примеру, можно было бы создать страницы ASP, которые будут поддерживать изменяемые объекты ADO Набор записей (Recordset). Они, в свою очередь, смогут применять методы Добавить новый (AddNew), Обновить (Update) и Удалить (Delete) для модификации данных в базах SQL Server. Помимо этого, возможно применять ADO для выполнения как динамических,, так и подготовленных заранее с помощью языка SQL операций модификации данных. Код приведенный на листинге 3, иллюстрирует, каким образом можно было бы добавлять строки в объект Набор записей (Recordset), который создается с использованием курсора Keyset.

    Листинг 3 представляет дополнительные технические приемы построения WEB-приложений с помощью ASP. Первая строка является оператором VBScript Option Explicit, который указывает, что все переменные в коде VBScript перед их применением будут явным образом продекларированы. Как и в стандартном Visual Basic, в VBScript предусмотрено автоматическое использование новых переменных, без их предварительного объявления. На первый взгляд это свойство может показаться очень удобным, но в реальности оно служит довольно эффективным способом ввести в разрабатываемое приложение ASP множество трудно находимых коварных ошибок.

    Следующим шагом оператором #include вводится файл adovbs.inc. Оператор #include представляет очень удобный путь копирования обычно употребляемых констант на страницы ASP. В данном случае файл adovbs.inc включает все константы, которые обычно содержит структура объекта ADO. Подключение этого файла дает возможность записывать константы в виде adChar и adKeyset, а не в виде значений, представляемых этими константами. Применение констант делает код удобно читаемым и легким в сопровождении. Хотя включение файла является хорошим приемом для средств разработки вообще, но в случае, когда для создания ASP- приложений используется такой инструмент, как Visual InterDev (VID), можно просто добавить в среду разработки VID ссылку на объектную библиотеку ADO. Подобное добавление устраняет необходимость включения файла в ASP- приложения. Чтобы добавить ссылку на ADO в проект VID следует выбрать в меню Проект (Project) и Ссылки проекта (Project References), а затем выбрать в списке доступных ссылок библиотеку Microsoft ActiveX Data Library 2.0.

    В соответствии со сценарием VBScript, приведенным на листинге 3, сначала уничтожается, а затем воссоздается заново таблица в базе данных pubs, после чего в эту таблицу вставляются 50 строк и полученное содержимое показывается на WEB-странице. Но прежде чем выполнить все это, в том месте сценария, которое отмечено в листинге 3 буквой А, инициируется обработчик ошибок VBScript. В этом примере оператор On Error применен для того, чтобы обойти любые ошибки, которые могут произойти, к примеру, при попытке удалить несуществующую таблицу из указанной базы данных. В следующем разделе будет более подробно рассмотрено использование обработчика ошибок.

    На следующем шаге сценарий ставит в соответствие переменной cn объект ADO Соединение (Connection). Затем метод Исполнить (Execute) объекта Соединение (Connection) выполняет два динамических оператора SQL. Первый уничтожает таблицу Department, а второй создает таблицу Department заново. После создания таблицы Department сценарий устанавливает в свойстве Активное соединение (ActiveConnection) объекта Набор записей (Recordset), указанного в переменной rs, ссылку на этот объект Соединение (Connection). Затем метод Открыть (Open) объекта Набор записей (Recordset) создает обновляемый набор записей. Константа adOpenKeyset определяет, что этот объект будет относиться к обновляемому типу Keyset, а константа adLockOptimistic предписывает использование оптимистического типа блокировки записей.

    Цикл For Next вставляет 50 строк в таблицу Department. В этом цикле метод Добавить новый элемент (AddNew) создает буфер для хранения новой строки, после чего цикл присваивает значения объектам ADO Поле (Field). Каждый объект коллекции Поле (Field) идентифицируется по названию столбца. Значение счетчика цикла присваивается столбцу Dep_Id, содержащему идентификатор отдела, а в столбец Dep_Name с названием отдела помещается литерал Department и представленный в виде символьной строки номер отдела, равный значению счетчика цикла. Цикл вставляет новую строку в базовую таблицу в ходе исполнения метода Обновить (Update) объекта Набор записей (Recordset).

    После того как сценарий вставит 50 строк в таблицу Department, метод Перейти к первой () перемещает курсор в начало объекта Набор записей (Recordset). Затем содержимое объекта Набор записей (Recordset) представляется в виде таблицы HTML, применяя ту же технику, что и в описанном ранее примере с запросом. На экране 2 показана WEB- страница, которая создается при запуске данной страницы ASP.

    Экран 2. Просмотр записей, введенных на страницу ASP
    Обработка ошибок ASP и ADO

    Очень важно перехватывать ошибки, возникающие во время работы приложения: если вдруг в результате некорректного функционирования WEB-приложения системой будет сгенерировано сообщение об ошибке, то работа WEB- приложения будет немедленно прекращена. Для того чтобы предусмотреть на странице ASP специальную часть сценария VBScript, отвечающую за обработку возникающих ошибок, применяется оператор On Error. К сожалению, оператор On Error не обладает всей полнотой возможностей обработчика ошибок VB, который позволяет перейти в отдельную секцию кода для обработки информации об ошибке. Оператор On Error, входящий в VBScript, предоставляет только следующую альтернативу: либо перейти к следующей операции (Resume Next), либо вообще отключить обработку ошибок. Этот оператор не дает возможности перейти к другим секциям кода. Оператор On Error использует структуру объекта ADO для того, чтобы поместить ошибки, возникающие во время выполнения WEB-приложения на базе страниц ASP, в коллекцию объекта ADO Ошибка (Error). Коллекцию ошибок ADO можно обрабатывать с целью сбора дополнительной информации о том, какие ошибки встречаются при эксплуатации вашего приложения. Фрагмент кода, приведенный на листинге 4, показывает, как использовать обработчик ошибок VBScript и каким образом извлекать информацию из объекта ADO Ошибка (Error).

    Обработку ошибок в листинге 4 обеспечивает оператор On Error. Затем для создания локального объекта ADO Соединение (Connection) по сценарию используется объект Соединение (Connection), который хранился в объекте ASP Сессия (Session). После этого в сценарии используется метод Выполнить (Execute) объекта ADO Команда (Command) применительно к заведомо неправильному имени таблицы. Поскольку обработка ошибок разрешена, программа переходит к следующему оператору.

    Проверка свойства Счетчик (Count) коллекции объектов Ошибка (Error) позволяет найти ошибки ADO. Если значение счетчика больше нуля, значит, объект ADO столкнулся с какой- либо ошибкой во время исполнения. Извлечь информацию об ошибках ADO можно путем итеративного просмотра коллекции объектов Ошибка (Error). Пример на листинге 4 использует цикл For Each для обработки элементов коллекции ошибок объекта ADO Соединение (Connection). Свойства Номер(), Источник () и Описание () становятся доступными в форме текстов HTML. Экран 3 представляет страницу с результатами обработки ошибок. (Обратите внимание на то, что рассмотренный пример является не более чем демонстрацией подхода. В реальном приложении необходимо обрабатывать условия возникновения ошибок в коде приложения. При этом следует избегать вывода ошибок на браузер конечного пользователя).

    Экран 3. Обработка ошибок ASP с помощью ADO

    В том случае, когда на WEB-страницу должны выводиться только статичные данные, целесообразно применять Мастер WEB-приложений (), входящий в состав SQL Server. Он поможет легко и быстро преобразовать информацию базы данных SQL Server к виду WEB-страницы формата HTML. Если же необходимо создать по-настоящему интерактивное приложение, способное динамически представлять и обновлять данные, лучше всего применять комбинацию ASP и ADO, что позволит подключить вашу базу данных SQL Server к сети WEB. Использование ADO и ASP дает возможность создавать WEB-приложения, обладающие теми же функциями, что и их предшественники, выполненные в соответствии с традиционной архитектурой клиент-сервер.

    В основу этой статьи лег адаптированный материал из книги Майкла Оути и Поля Конте «Руководство по разработке для SQL Server 7.0».

    Майк Оути (mikeo@teca.com) работает старшим техническим редактором в журналах SQL Server Magazine и Windows NT и является президентом компании ТЕСА. Эта компания занимается разработкой программного обеспечения и консалтингом; находится в Портленде, штат Орегон.

    Модель объектов ASP

    Информационный сервер Интернет, IIS (Internet Information Server), разработанный корпорацией Microsoft, вводит Активные серверные страницы, ASP (Active Server Pages), в качестве автоматического сервера OLE, обладающего иерархической структурой объекта. На рисунке А представлена модель объекта ASP. Первичным объектом в программной модели ASP является объект Контекст сценария (ScriptingContext), который обеспечивает взаимодействие с браузером клиента. Поскольку объект Контекст сценария (ScriptingContext) всегда доступен приложениям ASP, то нет необходимости в явном виде делать на него ссылку. Объект Контекст сценария (ScriptingContext) содержит шесть основных объектов ASP: пять встроенных объектов и объект Контекст объекта (ObjectContext). К пяти встроенным объектам относятся: объект Приложение (Application), объект Запрос (Request), объект Сервер (Server), объект Сессия (Session) и объект Отклик (Response).

    Все активные WEB-сессии применяют объект Приложение (Application) для того, чтобы все пользователи могли одновременно обращаться к информации приложения ASP. Объект Приложение (Application) включает две коллекции: Содержание (Context) и Статические объекты (StaticObjects). Каждый объект Содержание (Context) соответствует какому- либо пункту, для включения которого в WEB-приложение были использованы команды ActiveX. Коллекция Статические объекты (StaticObjects) содержит все объекты, для включения которых в WEB-приложение применялись ярлыки HTML . Кроме того, объект Приложение (Application) может также содержать определяемые пользователем объекты, которые были созданы этим WEB-приложением и предназначены для коллективного применения.

    Объект Запрос (Request) получает запросы от клиентов сети WEB. Объект Запрос (Request) может вместить всю информацию содержащуюся в форме, плюс сведения о текущем пользователе. Этот объект включает несколько коллекций, каждая из которых представляет различные информационные наборы, которые могут возвращаться клиентам WEB в ответ на их запросы. Каждый объект Сертификат клиента (ClientCertificate) в одноименной коллекции представляет поле сертификата, которое возвращает клиент сети WEB и которое в дальнейшем служит его идентификатором. Коллекция (Cookies) состоит из элементов, каждый из которых содержит немного информации о пользователе WEB. Коллекция Формы (Forms) включает набор объектов, каждый из которых представляет какую-нибудь форму HTML. Коллекция Строка запроса (QueryString) содержит набор добавляемых аргументов URL, а коллекция Переменные сервера (ServerVariables) представляет собой набор переменных, описывающих серверное окружение.

    Объект Сервер (Server) применяется для создания объектов OLE, которые было бы желательно иметь в WEB-приложении. Например, метод Создать объект (CreateObject) объекта Сервер (Server) генерирует объекты Соединение (Connection) и Набор записей (Recordset), обеспечивающих доступ к базам данных SQL Server.

    Объект Сессия (Session) поддерживает информацию, относящуюся к текущей сессии в сети WEB. Объект Сессия (Session) во многом похож на объект Приложение (Application), но имеет отличие от него. В то время как объект Приложение (Application) принадлежит всем пользователям сети WEB, объект Сессия (Session) относится только к текущей сессии. Коллекция объектов Содержание (Context) объекта Сессия (Session) включает все пункты, которые добавлялись в WEB-сессию с помощью команд сценария. Объект Контекст объекта (ObjectContext) обеспечивает доступ к контексту текущего объекта. Как правило, он порождает экземпляры объектов MTS или контролирует транзакции базы данных.

    Объект Отклик (Response) записывает информацию в виде потока страниц HTML и отсылает ее в браузер клиента. Объект Отклик (Response) также поддерживает коллекцию, состоящую из объектов, содержащих сведения, которые могут быть записаны в систему клиента. Они в последствии могут быть прочитаны объектом Запрос (Request).

    Рисунок А. Модель объектов ASP
    1 — Контекст сценария
    2 — Приложение
    3 — Содержание
    4 — Статические объекты
    5 — Определяемые пользователем объекты
    6 — Контекст объекта
    7 — Запрос
    8 — Формы
    9 — Строка запроса
    11 — Сервер
    12 — Сессия
    13 — Отклик

    Илон Маск рекомендует:  Тег a
    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL