Передача информации между страницами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Передача информации между страницами



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

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

http://www.google.ru/search?q=organic+gardening

Строка запроса — это часть URL-адреса, которая находится после вопросительного знака. В данном случае она определяет единственную переменную по имени q, которая содержит строку organic+gardening. Преимущество строки запроса в том, что она проста и не привносит никакой нагрузки на сервер. В отличие от межстраничной отправки, строка запроса может переносить одну и ту же информацию со страницы на страницу. Однако с ней связано несколько ограничений:

• Информация ограничивается простыми строками, которые должны содержать символы, допустимые для URL-адресов.

• Информация визуально доступна пользователю и любому другому работающему в Интернете человеку.

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

• Многие браузеры накладывают ограничения на длину URL-адреса (которая обычно не должна превышать 1-2 Кбайт). Поэтому в строку запроса нельзя помещать большой объем информации, к тому же все равно придется выполнять проверку на предмет совместимости с большинством браузеров.

Чтобы сохранить информацию в строке запроса, ее необходимо поместить туда самостоятельно. К сожалению, способа сделать это с помощью коллекций не существует. Как правило, это означает, что придется использовать специальный элемент управления HyperLink или оператор Response.Redirect(), подобный показанному ниже:

// Перейти на страницу page.aspx. Отправить единственный аргумент

// строки запроса по имени recordID и установить его в 10

intrecordID = 10;

Response.Redirect("page.aspx?recordID=" + recordID.ToString());

Для отправки множества параметров они должны разделяться с помощью амперсанда (&):

Response.Redirect("page.aspx?recordID=10&mode=full");

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

string ID = Request.QueryString["recordID"];

Если строка запроса не содержит параметр recordID или если она содержит этот параметр, но без значения, строка идентификатора устанавливается в null. Обратите внимание, что информация всегда извлекается в виде строки, которая затем может быть преобразована в другой простой тип данных. Значения в коллекции QueryString индексируются по имени переменной.

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

Архитектура ADO.NET.

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

 

Класс Connection позволяет устанавливать соединения с источником данных, с которым нужно взаимодействовать. Перед тем, как можно будет делать что-то еще (в том числе извлечение, удаление, вставка или обновление данных), понадобится установить соединение.

 

Поставщики данных в ADO.NET

Поставщик данных (dataprovider) — это набор классов ADO.NET, которые позволяют получать доступ к определенной базе данных, выполнять команды SQL и извлекать данные. По сути, поставщик данных — это мост между вашим приложением и источником данных.

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

Тип объекта Базовый класс Соответствующие интерфейсы Назначение
Connection Db IDb Позволяет подключаться к хранилищу данных и отключаться от него. Кроме того, объекты подключения обеспечивают доступ к соответствующим объектам транзакций
Command Db IDb Представляет SQL-запрос или хранимую процедуру. Кроме того, объекты команд предоставляют доступ к объекту чтения данных конкретного поставщика данных
DataReader Db IDb Предоставляет доступ к данным только для чтения в прямом направлении с помощью курсора на стороне сервера
DataAdapter Db IDb Пересылает наборы данных из хранилища данных к вызывающему процессу и обратно. Адаптеры данных содержат подключение и набор из четырех внутренних объектов команд для выборки, вставки, изменения и удаления информации в хранилище данных
Parameter Db IDb Представляет именованный параметр в параметризованном запросе
Transaction Db IDb Инкапсулирует транзакцию в базе данных

Конкретные имена этих основных классов различаются у различных поставщиков (например, SqlConnection, OracleConnection, OdbcConnection и MySqlConnection), но все эти объекты порождены от одного и того же базового класса (в случае объектов подключения это DbConnection), который реализует идентичные интерфейсы (вроде IDbConnection). Поэтому если вы научитесь работать с одним поставщиком данных, то легко справитесь и с остальными.

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

 

В рамках.NET Framework поставляется небольшой набор из четырех поставщиков:

SQL Server- Предоставляет оптимизированный доступ к базам данных SQL Server (версии 7.0 и выше).

OLE DB- Предоставляет доступ к любому источнику данных, который имеет драйвер OLE DB. Это включает базы данных SQL Server версий, предшествующих 7.0.

Oracle- Предоставляет оптимизированный доступ к базам данных Oracle (версии 8i и выше).

ODBC- Предоставляет доступ к любому источнику данных, имеющему драйвер ODBC.

 

 

Cтандартизация в Адо.нет

Но даже несмотря на то, что разные поставщики данных.NET используют различные классы, все они некоторым образом стандартизированы. Точнее говоря, каждый поставщик основан на одном и том же наборе интерфейсов и базовых классов. Так, например, объект Connection реализует интерфейс IDbConnection, который определяет такие ключевые методы, как Open() и Close(). Подобная стандартизация гарантирует, что каждый класс Connection будет работать одинаковым образом и предоставит один и тот же набор ключевых свойств и методов.

"За кулисами" различные поставщики используют совершенно разные низкоуровневые вызовы и API-интерфейсы. Например, поставщик данных SQL Server применяет патентованный протокол TDS (TabularDataStream — поток табличных данных) для взаимодействия с сервером. Преимущества этой модели не сразу очевидны, но весьма существенны:

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

• Поскольку каждый поставщик реализован отдельно, он может использовать соответствующую оптимизацию. Кроме того, специализированные поставщики могут добавлять нестандартные средства, которых не имеют другие поставщики (например, возможность SQL Sever выполнять XML-запросы).

ADO.NET также имеет другой уровень стандартизации — DataSet. Класс DataSet — это контейнер данных общего назначения, которые извлекаются из одной или более таблиц источника данных. DataSet полностью обобщен; другими словами, специализированные поставщики не определяют собственных специализированных версий класса DataSet.

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

 

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

Например, рассмотрим транзакцию, которая передает $1000 со счета A на счет B. Ясно, что здесь присутствует две операции:

• снять $1000 со счета А;

• добавить $1000 на счет B.

Предположим, что приложение успешно выполнило шаг 1, но из-за какой-то ошибки шаг 2 завершился сбоем. Это ведет к несогласованию данных, поскольку общая сумма денег в системе теперь не точна. Пропало $1000.

Транзакции позволяют избежать проблем подобного рода, поскольку гарантируют, что изменения будут зафиксированы в источнике данных только в том случае, если все шаги пройдут успешно. Поэтому в рассматриваемом примере, если шаг 2 сорвется, то изменения, выполненные на шаге 1, не будут зафиксированы в базе данных. Это гарантирует, что система останется в одном из двух корректных состояний — начальном (когда деньги не переведены) или конечном (когда деньги дебетованы с одного счета и кредитованы на другой).

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

Атомарность (Atomic)

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



Поделиться:


Последнее изменение этой страницы: 2017-02-09; просмотров: 171; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.23.101.60 (0.019 с.)