Как было сказано, выше после отправки страницы клиенту вся информация о ней удаляется из памяти web-сервера, что позволяет экономить ресурсы сервера, это означает, что информация будет теряться после каждой обратной отсылки. В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении. Эта информация используется, чтобы при повторном создании объёктов страницы на web-сервере, привести их в состояние, в котором они были перед последней отправкой страницы клиенту.
На рисунке 2 представлен жизненный цикл страницы ASP.NET.
Рис. 2. "Жизненный цикл страницы ASP.NET"
В данном пункте был обобщённо рассмотрен процесс взаимодействия пользователя с web-приложением посредством web-сервера и среды ASP.NET, а также приведён порядок обработки страниц средой ASP.NET.
2. Проектирование БД
2.1 Физическая модель БД
Проектирование таблиц базы данных и связей между ними осуществлялось с помощью встроенного редактора SQL Server 2000. На рисунке 3 представлена физическая модель базы данных web-приложения "Музыкальный Интернет-магазин".
Рис. 3 лист 1 "Физическая модель базы данных"
Скрипт для создания базы данных, а также примеры хранимых процедур, представлены в приложении 4.
Таблицы, представленные на рис. 3 лист 2, специально выделены в отдельную группу. Они необходимы для работы интерфейсов Membership API, Roles API и Profile API, предназначенных для обеспечения аутентификации и авторизации пользователей, а также управление профилями пользователей. Подробнее об этих интерфейсах и их использовании при разработке приложения написано в пунктах 4.5.1, 4.5.3 и 4.6 соответственно.
2.2 Описание таблиц БД
В таблице 1 представлена структура основных таблиц базы данных.
Таблица 1 "Структура основных таблиц БД"
Таблица | Атрибут | Тип данных | Примечание |
Catalogue(Каталог) | ProductID(Код продукта) | int | Первичный ключ, автоинкрементное |
ProductCode(Код продукта в каталоге фирмы-издателя) | nvarchar(30) | Уникальное | |
ArtistID(Код исполнителя) | Внешний ключ из таблицы Artists, часть составного уникального поля | ||
nvarchar(50) | Часть составного уникального поля | ||
TypeProductID(Код категории) | int | Внешний ключ из таблицы TypeProduct, часть составного уникального поля | |
GenreID(Кодмуз. жанра) | int | ||
PublisherID(Кодфирмы-издателя) | int | Внешний ключ из таблицы Publishers, часть составного уникального поля | |
YearRelease(Годвыпуска) | int | ||
DateAddition(Дата добавления в каталог) | smalldatetime | ||
Description(Описание) | nvarchar(4000) | ||
TrackList(Список композиций) | nvarchar(1000) | ||
bit | |||
BoughtQuantity(Кол-во заказов) | int | ||
UnitCost(Цена) | money | ||
ImageFile(Файл обложки) | |||
TypeProduct(Категория продукта) | TypeProductID(Код категории) | int | Первичный ключ, автоинкрементное |
TypeProductName(Название категории) | nvarchar(30) | Уникальное | |
Description(Описание) | nvarchar(50) | ||
Genres(Музыкальные жанры) | GenreID(Кодмуз. жанра) | Первичный ключ, автоинкрементное | |
GenreName(Название жанра) | nvarchar(50) | ||
Description(Описание) | nvarchar(50) | ||
Publishers(Фирмы-издатели) | PublisherID(Кодфирмы-издателя) | int | Первичный ключ, автоинкрементное |
PublisherName(Название фирмы-издателя) | nvarchar(50) | Уникальное | |
nvarchar(50) | |||
Artists(Исполнители) | ArtistID(Код испонителя) | int | Первичный ключ, автоинкрементное |
ArtistName(Названиеисполнителя) | nvarchar(50) | Уникальное | |
Description(Описание) | nvarchar(50) | ||
Responses(Отзывы о продукции) | int | Часть составного первичного ключа, автоинкрементное | |
ProductID(Код продукта) | Часть составного первичного ключа, внешний ключ из таблицы Catalogue | ||
Rating(Оценка) | tinyint | ||
UserName(Имя пользователя) | nvarchar(250) | ||
Response(Отзыв) | nvarchar(500) | ||
DateAddition(Дата добавления) | smalldatetime | ||
FAQ(Вопрос / Ответ) | FAQID(Код) | int | Первичный ключ, автоинкрементное |
UserName(Имя пользователя) | nvarchar(50) | ||
nvarchar(500) | |||
Answer | nvarchar(500) | ||
Orders(Заказы) | OrderID(Код заказа) | int | Первичный ключ, автоинкрементное |
uniqueidentifier | Внешний ключ из таблицы aspnet_Users | ||
OrderDate(Дата заказа) | smalldatetime | ||
SendDate(Дата отправки заказа) | |||
ConditionOrderID(Код состояния заказа) | int | Внешний ключ из таблицы ConditionOrder | |
TypePaymentID(Код способа оплаты) | int | Внешний ключ из таблицы TypePayment | |
TotalPrice(Цена заказа) | money | ||
Discount(Скидка) | int | ||
OrderDetails | OrderID(Код заказа) | int | Часть составного первичного ключа, внешний ключ из таблицы Orders |
ProductID(Код продукта) | int | Часть составного первичного ключа, внешний ключ из таблицы Catalogue | |
Quantity(Кол-во) | int | ||
UnitCost(Цена) | money | ||
ConditionOrderID(Код состояния заказа) | int | Первичный ключ, автоинкрементное | |
ConditionName(Наименование состояния заказа) | nvarchar(50) | ||
Description(Описание) | |||
TypePayment(Способы оплаты) | TypePaymentID(Код способа оплаты) | int | Первичный ключ, автоинкрементное |
3. Взаимодействие с БД
3.1 Архитектура ADO.NET
На сегодняшний момент существует множество технологий доступа к данным – ODBC, DAO, ADO и многие другие. Среда.NET Framework имеет свою собственную технологию доступа к данным – ADO.NET.
ADO.NET состоит из управляемых классов, позволяющих приложениям.NET подключаться к источникам данных (обычно реляционным базам данных), выполнять команды, осуществлять выборку, обработку и хранение данных.
В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении.
Важным элементом автономного доступа к данным является контейнер для табличных данных, который не знает о СУБД. Такой контейнер представлен в ADO.NET классом DataSet или DataTable.
Архитектуру ADO.NET можно разделить на две фундаментальные части: подключённую и автономную. Все различные классы ADO.NET можно отнести к подключённой или автономной части. Единственным исключением является класс DataAdapter. Работающий как посредник между подключённой и автономной частями.
Подключённая часть содержит классы, которым для работы нужно доступное открытое соединение, чтобы взаимодействовать с источником данных. Сюда входят классы для установки подключения к источнику данных (Connection), управления транзакциями (Transaction), выполнения команд (Command) и другие.
К автономной части относятся классы, которым не требуется доступное открытое подключение. В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении.
Далее на рисунке 4 представлена общая структура ADO.NET и то, как с помощью неё программа взаимодействует с источником данных.
Рис. 4 "Общая структура ADO.NET и её место в обеспечении доступа к данным"
Отличительной особенностью ADO.NET являются то, что для доступа к разным базам данных используются разный набор классов. В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении. Классы автономной части ADO.NET являются одинаковыми для всех баз данных.
В данном пункте была рассмотрена технология доступа к данным ADO.NET, определено её место в обеспечении взаимодействия приложения с базой данных, а также рассмотрены основные классы, которые будут использоваться при разработке дипломного проекта.
3.2 Компоненты доступа к данным
В профессиональных, хорошо спроектированных приложениях код взаимодействия с базой данных никогда не встраивается непосредственно в код, лежащий в основе web-страницы. В данной дипломной работе некоторые фрагменты текста отсутствуют или замещены на текст не соответствующий теме этого диплома. Отсутствуют или не соответствуют некоторые необходимые формулы, расчеты, диаграммы и таблицы. Для получения оригинальной версии работы пишите на электронный адрес, указанный в конце дипломной работы, в заключении. Чтобы выполнить операцию с базой данных, необходимо создать экземпляр класса и вызвать соответствующий метод.
При разработке дипломного проекта был использован именно такой подход. Для каждой таблицы базы данных, с которой будет взаимодействовать web-приложения, создан свой компонент доступа к данным, включающий все необходимые методы. Методы объявлены как статические, таким образом, вызывать их можно непосредственно через имя класса, не создавая его экземпляр. Каждый метод осуществляет обработку ошибок при взаимодействии с БД и информирует об этом web-страницу, из которой он был вызван.