Четверг Мая 17 , 2012
TEXT_SIZE
   


Закрытие объекта DataReader

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

кто использовал RDO. Различные технологии доступа к данным Microsoft по-разному подходили к этой ситуации. Если вы попытаетесь открыть в БД SQL Server два пожарных курсора с использованием ADO, все будет работать нормально и система не выдаст никакой ошибки. Это обусловлено спецификой OLE DB: если текущее соединение заблокировано, OLE DB-поставщик выполняет запрошенное действие по новому соединению. Думаю, разработчикам, имевшим дело с ADO, знакомо сообщение об ошибке Connection is busy with results from another hstmt.. ODBC не выполняет какойлибо закулисной работы, чтобы помочь вам разрешить возникшую ситуацию. Если вы попытаетесь воспользоваться занятым соединением, то просто получите сообщение об ошибке.

Какой из этих подходов (генерирование ошибки или выполнение нужного действия по новому соединению) лучше? Разработчики как из Microsoft, так и из других компаний не могут прийти к единому мнению. Фактически, каждая новая технология доступа к данным Microsoft предлагает свой способ разрешения этой ситуации: VBSQL генерирует ошибку, DAO/Jet открывает новое соединение, RDO генерирует ошибку, ADO открывает новое соединение и ADO.

NET генерирует ошибку. Как говорят в Новой Англии: Если погода вам не нравится, немного подождите. Назначение объекта DataReader — обеспечить высокую производительность.

Независимо от того, что открытый DataReader блокирует объект Connection, вам следует как можно быстрее получать результаты выполняемого запроса. Если необходимо перемещаться взад-вперед между результатами разных запросов, используйте объект DataSet или попробуйте хранить результаты запросов в каком-нибудь бизнес-объекте.

Добавить комментарий


Защитный код
Обновить

Рейтинг пользователей: / 0
ХудшийЛучший 

Метео

Войти

Голосование

Идеальный вариант проведения новогодней корпоративной вечеринки - это…

Сейчас на сайте

Сейчас 6 гостей онлайн