Воскресенье, 2025-02-09, 2:00 AM
Статьи - ASP
Приветствую Вас Гость | RSS
Главная страница Каталог статей Регистрация Вход
Меню сайта

Категории каталога
ASP [32]
Статьи по ASP

Наш опрос
Какой раздел нужно пополнить (создать) ?
Всего ответов: 100

Начало » Статьи » ASP » ASP

о использовать, DataReader или DataSet?
Я постоянно слышу один и тот же вопрос: "Что мне лучше использовать для моего ASP.NET веб - приложения, DataReader или DataSet?". Самое большое недоразумение, которое я когда-либо читал в статьях или новостных группах, состоит в том, что DataReader (имеется в виду SqlDataReader или OleDbDataReader) лучше, чем DataSet. Иногда я встречаю абсолютно противоположное утверждение. Суть в том, что Microsoft разработал оба этих класса для доступа к данным только потому, что оба они нужны. У каждого есть свои сильные и слабые стороны, и использование какого-либо одного из них должно определяться конкретной ситуацией.
Статья проливает свет на эту проблему, приводя несколько принципов, на основании которых можно сделать выбор, когда использовать DataReader, а когда DataSet в контексте разработки ASP.NET. При разработке клиентских Windows Forms приложений, эти правила могут быть изменены. Я предполагаю здесь, что вы достаточно знакомы с обоими этими классами.

Использование класса DataReader

Вот идеальные ситуации в которых вам следует использовать класс DataReader:

Данные, которые Вы запрашиваете должны всегда быть актуальными, и поэтому должны запрашиваться из БД каждый раз, как только Вам это необходимо. Класс DataReader создается быстрее, и производительность класса DataReader увеличивается быстрее по сравнению с классом DataSet при увеличивающейся загрузке .
Вам просто нужна каждая строка данных. Наилучшим примером в этом случае может служить простое связывание класса DataReader с элементом управления веб, таким как DataGrid или DropDownList.
Вам нужно простое чтение XML данных из БД, только вперед. В этом случае вы можете использовать метод ExecuteXmlReader() объекта SQLCommand для доступа к классу XmlReader (XML аналог DataReader). Для этого необходимо использовать предложение FOR XML в запросе к SQL Server, или поле типа ntext, которое содержит корректный XML.
Вы планируете использовать несколько повторяющихся запросов для получения информации частями. Особенность, которая описана в первой ситуации, еще больше проявляется здесь.
Действительно, многие возможности, которые делают класс DataSet лучше, такие, как возможность устанавливать связи между таблицами, лучше оставить для клиентских Windows Forms приложений.

[В начало]

Использование класса DataSet

Вот когда вам следует рассмотреть возможность использования класса DataSet:

Вы создаете веб сервис, который использует данные, которые вы получаете как результат запроса. Из-за того, что класс DataReader осуществляет соединение с БД, они не могут быть преобразованы в XML и, следовательно, не могут быть переданы вызывающей стороне через веб - сервис.
Вам нужно использовать сортировку или фильтрацию данных. Прежде чем использовать объект DataView (со свойством DefaultView класса DataTable, содержащий класс DataSet) для сортировки и фильтрации данных, попробуйте сначала использовать специальные конструкции SQL запроса - такие как WHERE и ORDER BY - чтобы сохранить возможность использования более легкого и быстрого класса DataReader. Однако когда этим не обойдешься, или когда вам нужно использовать сортировку или фильтрацию данных несколько раз, то, конечно, следует использовать DataSet.
Вам необходимо перемещаться по данным, полученным в результате одного запроса несколько раз. Перемещаться по набору данных DataReader можно только один раз. Если, для примера, вам нужно связывать более одного серверного элемента управления с одними и теми же данными, то использование класса DataSet более предпочтительно. DataReader не может быть привязан к более чем одному серверному элементу управления, потому что он умеет перемещаться по своим данным только вперед. Вам придется запрашивать данные из БД второй раз, для того чтобы использовать DataReader в этом случае.
Вам нужно хранить данные, которые будут использоваться для последующих запросов страниц. Если данные принадлежат кому-то, кто их запросил, вы можете сохранить класс DataSet в переменной Session. Если к этим данным могут иметь доступ все, то вы можете сохранить их в переменной Application или в Cache (рекомендуется по причине того, что поддерживаются сроки хранения и обратные вызовы). По причине того, что класс DataReader поддерживает открытое соединение с БД, и хранит только одну строку данных в единицу времени, он не может использоваться в запросах различных страниц.
Вам приходится использовать сложные или требующие много времени функции для каждого элемента результирующего набора данных. Например, если вы получили список почтовых индексов и теперь хотите вызвать веб сервис для получения детальной информации по каждому индексу, лучше всего использовать DataSet. Все потому, что при использовании класса DataReader, соединение с БД не будет освобождено до тех пор, пока вы не уничтожите сам DataReader. Даже небольшая задержка на одной странице, при обработке тысяч таких страниц может повлечь за собой значительное увеличение трафика через доступные соединения. В отличие от этого, DataSet может получить сразу все данные и закрыть соединение с БД.
Вам требуется загрузить и обработать XML данные по двумерному принципу. Использование класса DataSet более предпочтительно для обработки XML, потому что вы можете использовать DataView для сортировки и фильтрации полученных данных таким же способом, как и при работе с обычным набором данных. Заметьте, однако, что в пространстве имен System.Xml реализовано множество классов, специально разработанных для обработки XML данных.
Вы работаете с источником данных, не относящимся к БД. Несмотря на то, что OleDbDataReader может использоваться для любого OLEDB провайдера (который может представлять или не представлять БД), объект DataSet может загружать данные напрямую из XML файлов и динамически интерпретировать их схему. DataSet также обладает возможностью записывать XML данные в поток или в файл.

Как вы можете видеть, класс DataSet имеет больше возможностей, чем DataReader, которые позволяют вам использовать DataSet гораздо шире. Это, однако, не означает то, что DataSet используется чаще. Многие задачи, которые вы решаете в своих ASP.NET приложениях вполне под силу DataReader.
И все-таки, класс DataSet несомненно играет очень важную роль в ASP.NET веб - приложениях. Вы можете уменьшить проблему потребности в ресурсах класса DataSet разумным использованием механизмов кэширования. Оба рассмотренных класса являются необходимыми составными частями успешного ASP.NET веб - приложения. Очень важно понимать и знать, когда лучше использовать один из них.

Категория: ASP | Добавил: webmaster (2006-12-04)
Просмотров: 459 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа

Сервисы

Поиск по каталогу

Друзья сайта

| Ссылки 1 | Ссылки 2 | Ссылки 3 |
www.webmaster.clan.su Каталог+поисковая система be number one Bakililar.az Top Sites Сервис авто регистрации в
каталогах, статьи про раскрутку сайтов, web дизайн, flash, 
photoshop, хостинг, рассылки; форум, баннерная сеть, каталог 
сайтов, услуги продвижения и рекламы сайтов Скрипт для определения тиц (Яндекс CY: индекс цитирования). Определение pr (Google Pagerank). Проверить тиц pr сайта.
Copyright WebMaster.Clan © 2006 Бесплатный хостинг uCoz