Для доступа к иерархическим строкам, возвращаемым источником данных, в ADO.NET используются объекты DataReader и DataSet. Объект DataReader обеспечивает простой и быстрый доступ к данным только для чтения. С помощью этого объекта можно обращаться либо к иерархическим строкам данных, полученным в результате выполнения нескольких операторов SELECT, либо к XML-данным, возвращаемым SQL Server 2000. Объект DataReader позволяет читать данные только в направлении вперед (forward-only) и остается соединенным с базой данных, пока приложение читает данные.
Объект DataSet, напротив, представляет отсоединенный реляционный кэш данных в памяти. Он может содержать несколько таблиц, рассматриваемых как отдельные или связанные таблицы. Особенности этого объекта облегчают навигацию по связанным данным и их модификацию.
Кроме того, SQL Server .NET Data Provider позволяет получить XML-поток напрямую от SQL Server 2000. Для этого предоставляется специальная API-функция, ExecuteXmlReader, доступная через объект SQLCommand. Метод ExecuteXmlReader выполняет SQL-запрос применительно к SQL-соединению и на основе XML, возвращенного запросом, создает объект XmlReader. ExecuteXmlReader используется только в выражениях, результатом которых являются XML-данные, и эффективен в запросах, где в выражениях с SELECT присутствует блок FOR XML.