Создание объекта 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);

 
< Пред   СОДЕРЖАНИЕ     След >