Создание объекта DataReader
Объект DataReader создается с помощью вызова метода ExecuteReader() объекта Command. Например:
// должен быть объект mySqlCommand
System.Data. SqlClient.SqlDataReader mySqlReader;
mySqlReader = mySqlCommand.ExecuteReader();
При вызове метода ExecuteReader() объект Command исполняет представленную им команду и создает объект DataReader соответствующего типа, который можно записать в переменную ссылочного типа.
Доступ к данным с помощью объекта DataReader
Получив ссылку на объект DataReader, можно просматривать записи, загружая нужные данные в память. У нового объекта DataReader указатель чтения устанавливается на первую запись полученной выборки. Чтобы сделать ее доступной, следует вызвать метод Read(). Если запись доступна, метод Read() переводит указатель объекта DataReader к следующей записи и возвращает True, в противном случае метод Read() возвращает значение false. Тогда перебор всех записей полученной выборки в цикле while может быть выполнен следующим образом:
while(myDataReader.Read())
{
// Этот код будет однократно исполнен //для каждой записи полученной выборки.
}
При чтении записи с помощью объекта DataReader значения отдельных полей доступны через индексатор класса, к элементам которо-
го можно обращаться по числовому индексу либо по имени поля, например:
while (myDataReader.Read()){
object myObject = myDataReader[3];
object myOtherObject = myDataReadeif'CustomerlD"];
}
В данном случае DataReader предоставляет все значения в виде элементов типа object, хотя с помощью DataReader можно получать и типизированные данные. После выполнения данного цикла следует вызвать метод Close(), чтобы закрыть DataReader, в противном случае объект DataReader будет удерживать монопольный доступ к активному соединению, сделав его недоступным другим объектам: myDataReader.Close();
Следующий пример демонстрирует перебор записей полученной выборки записей для вывода содержимого одного из столбцов в окне Console. Этот пример предполагает наличие объекта OleDbCommand с именем myOleDbCommand, свойство Connection которого определяет соединение с именем myConnection:
// Открыть активное соединение, myConnection.Ореп();
// Создать объект DataReader
System.Data.OleDb.OleDbDataReader myReader;
myReader = myOleDbCommand.ExecuteReader();
// Вызвать метод Read перед попыткой чтения данных,
while (myReader.Read()) {
// Получить доступ к полю можно по имени
Console.WriteLine(myReader["Customers"].ToString());
}
myReader.Close(); //закрываем DataReader myConnection.Close;
//закрываем соединение
Извлечение типизированных данных с помощью DataReader
Объекты класса DataReader не только предоставляют данные типа object, но и позволяют извлекать из полученной выборки и данные других типов с помощью специальных методов. Имена этих методов образуются из префикса Get и имени типа извлекаемых данных. Например, метод, извлекающий значения типа Boolean, назван GetBoolean(). Например:
string myString = myDataReader.GetBoolean(3);
При использовании такого способа извлечения данных нужно указывать порядковый номер, а не имя поля. Если известно только имя поля, можно определить его порядковый номер, вызвав метод GetOrdinal(), например: int CustomerlD; string Customer:
CustomerlD = myDataReader.GetOrdinal("CustomerID");
Customer = myDataReader.GetString(CustomerID);