4. Привязка объектов контроля к источникам данных

Чтение данных в рабочие объекты

есть еще один важный класс

Я довольно подробно рассказал в этом приложении о наборах данных, так как они являются наиболее развитым и часто используемым контейнером реляционных данных как в приложениях Windows, так и в Web-приложениях клиента и среднего яруса. Есть еще один важный класс доступа к данным, о котором уже было вкратце рассказано: считыватель данных. Считыватель данных является быстрым поступательным указателем для чтения в возвращаемый из базы данных набор результатов. Каждый управляемый провайдер должен предоставлять свой собственный специфический класс считывателя данных. Считыватель для SQL Server называется, как и МОЖНО Было ожидать, SqlDataReader.

Класс SqlDataReader Позволяет вам исполнить запрос и быстро произвести итерацию по всем строкам возвращаемых результатов, чтобы произвести обработку этих строк. Заметьте, я не сказал, что считыватель данных является указателем в саму базу данных. Вам действительно нужно поддерживать открытое соединение, ассоциированное со считывателем, пока вы итерируете результаты. Но считыватель данных будет буферизовать результаты запроса на стороне клиента, и вы не сможете модифицировать нижележащие данные. Все, что вы можете — это читать возвращаемые строки и работать с ними. Когда вы закончите использование считывателя данных, то должны обеспечить закрытие соединения, как и для любого другого запроса. Нередко уровень доступа к данным передает считыватель в качестве возвращаемого значения некоторого метода доступа к данным. Этот код позволяет клиенту взять возвращаемый считыватель, быстро итерировать результаты и сделать с ними то, что ему требуется. Но если вы посмотрите на код, то заметите, что для этого нужно, открыв соединение с базой данных, оставить его открытым, чтобы клиент мог итерировать по содержимому считывателя данных. Однако соединение объявляется и открывается на уровне доступа к данным, и не доступно непосредственно для кода клиента, чтобы он мог закрыть соединение, когда завершит работу со считывателем. Так как же клиент может гарантировать, что соединение будет закрыто, когда он закончит использование считывателя? Вы видите здесь, что методу ExecuteReader Команды передается значение CloseConnection Из перечисления CommandBehavior.