Введение

В АДО. DataReader - это широкая категория объектов, используемых для последовательного считывания данных из источника данных. DataReaders обеспечивают очень эффективный способ доступа к данным и могут рассматриваться как курсор Firehose от ASP Classic, за исключением того, что курсор не используется со стороны сервера. DataReader анализирует табличный поток данных из Microsoft SQL Server и другие методы извлечения данных из других источников. DataReader обычно сопровождается командным объектом, который содержит запрос, необязательно любые параметры и объект соединения для выполнения запроса.

Типы DataReader

В ADO нет класса DataReader. DataReader имеет небольшой объем и хорошую производительность, потому что каждый из них адаптирован к конкретной задаче, однако это затрудняет написание приложения, которое может быть перенесено из одного источника данных в другой. Некоторые специальные DataReaders поставщика выставляют типы, используемые базовой базой данных, например, значения могут быть нулевыми в Microsoft SQL Server, но не в NET Framework до версии 2.0.

Сильная и слабая типизация

При использовании DataReader для извлечения данных разработчик может выбрать, читать ли значения поля в сильно типизированном виде (пример: ) или в слабо типизированном виде, возвращая затем s (пример: ). У обоих подходов есть свои плюсы и минусы. Использование методов извлечения с сильным типовым набором может быть более громоздким, особенно без конкретных знаний о базовых данных. Числовые значения в базе данных могут переводиться в несколько типов NET: , или Попытка извлечь значение с использованием неправильного типа приводит к выбросу исключения, которое останавливает выполнение кода и замедляет работу приложения. Это также верно, когда вы используете правильный тип, но встречаете значение (этого можно избежать, используя булевую функцию класса DataReader). Преимущество этого метода извлечения заключается в том, что проверка данных выполняется раньше, что повышает вероятность возможности коррекции данных. Выздоровление данных с слабым типом позволяет быстро писать код и позволяет использовать данные каким-то образом, когда разработчик заранее не знает, какие типы будут возвращены. Кроме того, с некоторыми усилиями программист может извлечь значение в переменную соответствующего типа, используя методы DataReader.

Частые ошибки

В некоторых случаях DataReader может использоваться вместо DataTable, однако многие программисты испытывают проблемы с подключением при использовании этого подхода. DataReader может использоваться только против (уже) открытого соединения с базой данных; это соединение не закрывается, пока метод DataReader не будет вызван. Если исключение будет выбрасываться во время обработки данных, например, как описано в Strong и weak typing, выше, метод никогда не будет вызван, если разработчик пишет код, явно декларирующий и утилизирующий DataReader без использования блока. Конструкция C# является хорошим способом избежать этой проблемы, как показано ниже в примере кода.