Введение
В АДО. DataReader - это широкая категория объектов, используемых для последовательного считывания данных из источника данных. DataReaders обеспечивают очень эффективный способ доступа к данным и могут рассматриваться как курсор Firehose от ASP Classic, за исключением того, что курсор не используется со стороны сервера. DataReader анализирует табличный поток данных из Microsoft SQL Server и другие методы извлечения данных из других источников. DataReader обычно сопровождается командным объектом, который содержит запрос, необязательно любые параметры и объект соединения для выполнения запроса.
Типы DataReader
В ADO нет класса DataReader. DataReader имеет небольшой объем и хорошую производительность, потому что каждый из них адаптирован к конкретной задаче, однако это затрудняет написание приложения, которое может быть перенесено из одного источника данных в другой. Некоторые специальные DataReaders поставщика выставляют типы, используемые базовой базой данных, например, значения могут быть нулевыми в Microsoft SQL Server, но не в NET Framework до версии 2.0.
DataReaders have a small footprint and good performance because each is tailor made to the task at hand, however this makes it more difficult to write an application that can be moved from one backend data source to another. Some provider specific DataReaders expose types used by the underlying database for example, values can be null in Microsoft SQL Server, but not in the NET Framework prior to version 2.0.
Сильная и слабая типизация
При использовании DataReader для извлечения данных разработчик может выбрать, читать ли значения поля в сильно типизированном виде (пример: ) или в слабо типизированном виде, возвращая затем s (пример: ). У обоих подходов есть свои плюсы и минусы. Использование методов извлечения с сильным типовым набором может быть более громоздким, особенно без конкретных знаний о базовых данных. Числовые значения в базе данных могут переводиться в несколько типов NET: , или Попытка извлечь значение с использованием неправильного типа приводит к выбросу исключения, которое останавливает выполнение кода и замедляет работу приложения. Это также верно, когда вы используете правильный тип, но встречаете значение (этого можно избежать, используя булевую функцию класса DataReader). Преимущество этого метода извлечения заключается в том, что проверка данных выполняется раньше, что повышает вероятность возможности коррекции данных. Выздоровление данных с слабым типом позволяет быстро писать код и позволяет использовать данные каким-то образом, когда разработчик заранее не знает, какие типы будут возвращены. Кроме того, с некоторыми усилиями программист может извлечь значение в переменную соответствующего типа, используя методы DataReader.
Частые ошибки
В некоторых случаях DataReader может использоваться вместо DataTable, однако многие программисты испытывают проблемы с подключением при использовании этого подхода. DataReader может использоваться только против (уже) открытого соединения с базой данных; это соединение не закрывается, пока метод DataReader не будет вызван. Если исключение будет выбрасываться во время обработки данных, например, как описано в Strong и weak typing, выше, метод никогда не будет вызван, если разработчик пишет код, явно декларирующий и утилизирующий DataReader без использования блока. Конструкция C# является хорошим способом избежать этой проблемы, как показано ниже в примере кода.