Поделиться через


OracleDataReader Класс

Определение

Предоставляет способ чтения потока строк данных из источника только в прямом порядке. Этот класс не наследуется.

public ref class OracleDataReader sealed : MarshalByRefObject, IDisposable, System::Collections::IEnumerable, System::Data::IDataReader
public ref class OracleDataReader sealed : System::Data::Common::DbDataReader
public sealed class OracleDataReader : MarshalByRefObject, IDisposable, System.Collections.IEnumerable, System.Data.IDataReader
public sealed class OracleDataReader : System.Data.Common.DbDataReader
type OracleDataReader = class
    inherit MarshalByRefObject
    interface IDataReader
    interface IDisposable
    interface IDataRecord
    interface IEnumerable
type OracleDataReader = class
    inherit DbDataReader
Public NotInheritable Class OracleDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
Public NotInheritable Class OracleDataReader
Inherits DbDataReader
Наследование
OracleDataReader
Наследование
Реализации

Примеры

В следующем примере создаются OracleConnection, OracleCommandи OracleDataReader. Этот пример считывает данные, записывая их в консоль. Наконец, пример закрывает OracleDataReader, а затем .OracleConnection

public void ReadData(string connectionString)
{
   string queryString = "SELECT EmpNo, EName FROM Emp";
   using (OracleConnection connection = new OracleConnection(connectionString))
   {
      OracleCommand command = new OracleCommand(queryString, connection);
      connection.Open();
      using(OracleDataReader reader = command.ExecuteReader())
      {
         // Always call Read before accessing data.
         while (reader.Read())
         {
            Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetString(1));
         }
      }
   }
}
Public Sub ReadData(ByVal connectionString As String)
    Dim queryString As String = "SELECT EmpNo, EName FROM Emp"
    Using connection As New OracleConnection(connectionString)
        Dim command As New OracleCommand(queryString, connection)
        connection.Open()
        Using reader As OracleDataReader = command.ExecuteReader()
            ' Always call Read before accessing data.
            While reader.Read()
                Console.WriteLine(reader.GetInt32(0).ToString() + ", " _
                   + reader.GetString(1))
            End While
        End Using
    End Using
End Sub

Комментарии

Чтобы создать OracleDataReader, необходимо вызвать ExecuteReader метод OracleCommand объекта , а не напрямую с помощью конструктора.

Изменения, внесенные в набор результатов другим процессом или потоком во время чтения данных, могут быть видны пользователю OracleDataReader.

IsClosed и RecordsAffected являются единственными свойствами, которые могут быть вызваны после закрытия OracleDataReader. В некоторых случаях перед вызовом необходимо вызвать CloseRecordsAffected.

В любой OracleDataReader момент времени можно открыть несколько.

В следующих двух примерах Visual Basic показано, как использовать OracleDataReader для получения Oracle REF CURSOR. В этих примерах используются таблицы, определенные в схеме Oracle Scott/Tiger, для которых требуется следующий пакет PL/SQL и текст пакета. Чтобы использовать примеры, их необходимо создать на сервере.

Создайте на сервере Oracle следующий пакет Oracle.

CREATE OR REPLACE PACKAGE CURSPKG AS   
   TYPE T_CURSOR IS REF CURSOR;   
   PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,   
      IO_CURSOR IN OUT T_CURSOR);   
   PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,   
      DEPTCURSOR OUT T_CURSOR);  
END CURSPKG;  
/  

На сервере Oracle создайте следующий текст пакета Oracle.

CREATE OR REPLACE PACKAGE BODY CURSPKG AS   
    PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,   
                               IO_CURSOR OUT T_CURSOR)   
    IS   
        V_CURSOR T_CURSOR;   
    BEGIN   
        IF N_EMPNO <> 0 THEN   
             OPEN V_CURSOR FOR   
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME   
                  FROM EMP, DEPT   
                  WHERE EMP.DEPTNO = DEPT.DEPTNO   
                        AND EMP.EMPNO = N_EMPNO;   
        ELSE   
             OPEN V_CURSOR FOR   
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME   
                  FROM EMP, DEPT   
                  WHERE EMP.DEPTNO = DEPT.DEPTNO;   
        END IF;   
        IO_CURSOR := V_CURSOR;   
    END OPEN_ONE_CURSOR;   
    PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,   
                                DEPTCURSOR OUT T_CURSOR)   
    IS   
        V_CURSOR1 T_CURSOR;   
        V_CURSOR2 T_CURSOR;   
    BEGIN   
        OPEN V_CURSOR1 FOR SELECT * FROM EMP;   
        OPEN V_CURSOR2 FOR SELECT * FROM DEPT;   
        EMPCURSOR  := V_CURSOR1;   
        DEPTCURSOR := V_CURSOR2;   
    END OPEN_TWO_CURSORS;   
END CURSPKG;  
/  

В этом примере Visual Basic выполняется хранимая процедура PL/SQL, которая возвращает REF CURSOR параметр и считывает значение как OracleDataReader.

Private Sub ReadOracleData(ByVal connectionString As String)  
   Dim connection As New OracleConnection(connectionString)  
   Dim command As New OracleCommand()  
   Dim reader As OracleDataReader  

   connection.Open()  
   command.Connection = connection  
   command.CommandText = "CURSPKG.OPEN_ONE_CURSOR"  
   command.CommandType = CommandType.StoredProcedure  
   command.Parameters.Add(New OracleParameter("N_EMPNO", OracleType.Number)).Value = 7369  
   command.Parameters.Add(New OracleParameter("IO_CURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output  

   reader = command.ExecuteReader()  
   While (reader.Read())  
      ' Do something with the values.  
   End While  
   reader.Close()  
   connection.Close()  
End Sub  

В этом примере Visual Basic выполняется хранимая процедура PL/SQL, которая возвращает два REF CURSOR параметра и считывает значения с помощью OracleDataReader.

Private Sub ReadOracleData(ByVal connectionString As String)  
   Dim dataSet As New DataSet()  
   Dim connection As New OracleConnection(connectionString)  
   Dim command As New OracleCommand()  
   Dim reader As OracleDataReader  

   connection.Open()  
   command.Connection = connection  
   command.CommandText = "CURSPKG.OPEN_TWO_CURSORS"  
   command.CommandType = CommandType.StoredProcedure  
   command.Parameters.Add(New OracleParameter("EMPCURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output  
   command.Parameters.Add(New OracleParameter("DEPTCURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output  

   reader = command.ExecuteReader(CommandBehavior.CloseConnection)  
   While (reader.Read())  
      ' Do something with the values.  
   End While  
   reader.NextResult()  
   While (reader.Read())  
        ' Do something with the values.  
   End While  
   reader.Close()  
   connection.Close()  
 End Sub  

Этот пример C# создает таблицу Oracle и загружает ее с данными. Этот пример необходимо выполнить перед выполнением последующего примера, в котором демонстрируется использование OracleDataReader для доступа к данным с помощью структур OracleType.

public void Setup(string connectionString)  
{  
   OracleConnection connection = new OracleConnection(connectionString);  
   try  
   {  
      connection.Open();  
      OracleCommand command = connection.CreateCommand();  
      command.CommandText ="CREATE TABLE OracleTypesTable (MyVarchar2 varchar2(3000),MyNumber number(28,4) PRIMARY KEY,MyDate date, MyRaw raw(255))";  
      command.ExecuteNonQuery();  
      command.CommandText ="INSERT INTO OracleTypesTable VALUES ('test', 2, to_date('2000-01-11 12:54:01','yyyy-mm-dd hh24:mi:ss'), '0001020304')";  
      command.ExecuteNonQuery();  
      command.CommandText="SELECT * FROM OracleTypesTable";  
   }  
   catch(Exception)  
   {  
   }  
   finally  
   {  
      connection.Close();  
   }  
}  

В этом примере C# используется OracleDataReader для доступа к данным, а для отображения данных используется несколько OracleType структур.

public void ReadOracleTypesExample(string connectionString)  
{  
   OracleConnection connection = new OracleConnection(connectionString);  
   connection.Open();  
   OracleCommand command = connection.CreateCommand();  
   try  
   {  
      command.CommandText = "SELECT * FROM OracleTypesTable";  
      OracleDataReader reader = command.ExecuteReader();  
      reader.Read();  
      //Using the Oracle specific getters for each type is faster than  
      //using GetOracleValue.  
      //First column, MyVarchar2, is a VARCHAR2 data type in Oracle Server  
      //and maps to OracleString.  
      OracleString oraclestring1 = reader.GetOracleString(0);  
      Console.WriteLine("OracleString " + oraclestring1.ToString());  

      //Second column, MyNumber, is a NUMBER data type in Oracle Server  
      //and maps to OracleNumber.  
      OracleNumber oraclenumber1 = reader.GetOracleNumber(1);  
      Console.WriteLine("OracleNumber " + oraclenumber1.ToString());  

      //Third column, MyDate, is a DATA data type in Oracle Server  
      //and maps to OracleDateTime.  
      OracleDateTime oracledatetime1 = reader.GetOracleDateTime(2);  
      Console.WriteLine("OracleDateTime " + oracledatetime1.ToString());  

      //Fourth column, MyRaw, is a RAW data type in Oracle Server and  
      //maps to OracleBinary.  
      OracleBinary oraclebinary1 = reader.GetOracleBinary(3);  

      //Calling value on a null OracleBinary throws  
      //OracleNullValueException; therefore, check for a null value.  
      if (oraclebinary1.IsNull==false)  
      {  
         foreach(byte b in oraclebinary1.Value)  
         {  
            Console.WriteLine("byte " + b.ToString());  
         }  
      }  
      reader.Close();  
   }  
   catch(Exception e)  
   {  
      Console.WriteLine(e.ToString());  
   }  
   finally  
   {  
      connection.Close();  
   }  
}  

Свойства

Depth

Возвращает значение, показывающее глубину вложенности для текущей строки.

FieldCount

Возвращает число столбцов в текущей строке.

HasRows

Получает значение, указывающее, содержит ли объект OracleDataReader одну или несколько строк.

IsClosed

Указывает, закрыт ли объект OracleDataReader.

Item[Int32]

Возвращает значение указанного столбца в собственном формате при наличии заданного порядкового номера столбца.

Item[String]

Возвращает значение заданного столбца в собственном формате при наличии заданного имени столбца.

RecordsAffected

Возвращает число строк, которые были изменены, вставлены или удалены инструкцией SQL.

VisibleFieldCount

Возвращает число не скрытых полей в DbDataReader.

(Унаследовано от DbDataReader)

Методы

Close()

Закрывает объект OracleDataReader.

CloseAsync()

Асинхронно закрывает объект DbDataReader.

(Унаследовано от DbDataReader)
CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
Dispose()

Освобождает ресурсы, используемые данным объектом.

Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса DbDataReader.

(Унаследовано от DbDataReader)
Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом DbDataReader, а при необходимости освобождает также управляемые ресурсы.

(Унаследовано от DbDataReader)
DisposeAsync()

Асинхронно освобождает все ресурсы, используемые текущим экземпляром класса DbDataReader.

(Унаследовано от DbDataReader)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetBoolean(Int32)

Возвращает значение указанного столбца в виде логического значения.

GetByte(Int32)

Возвращает значение указанного столбца в виде байта.

GetBytes(Int32, Int64, Byte[], Int32, Int32)

Считывает поток байтов из указанного смещения столбца в буфер в виде массива, начиная с заданного смещения буфера.

GetChar(Int32)

Возвращает значение указанного столбца в виде символа.

GetChars(Int32, Int64, Char[], Int32, Int32)

Считывает поток символов из указанного смещения столбца в буфер как массив, начиная с заданного смещения буфера.

GetColumnSchemaAsync(CancellationToken)

Это асинхронная версия метода GetColumnSchema(DbDataReader). Поставщики должны выполнить переопределение с помощью соответствующей реализации. При необходимости можно учитывать cancellationToken. Реализация по умолчанию вызывает синхронный метод GetColumnSchema(DbDataReader) и возвращает выполненную задачу. Реализация по умолчанию возвращает отмененную задачу, если ей передается уже отмененный cancellationToken. Исключения, создаваемые GetColumnSchema(DbDataReader), будут связаны через возвращаемое свойство исключения задачи.

(Унаследовано от DbDataReader)
GetData(Int32)

Возвращает IDataReader для указанного порядкового номера столбца.

GetData(Int32)

Возвращает вложенный объект чтения данных для запрошенного столбца.

(Унаследовано от DbDataReader)
GetDataTypeName(Int32)

Получает имя исходного типа данных.

GetDateTime(Int32)

Возвращает значение указанного столбца в виде объекта DateTime.

GetDbDataReader(Int32)

Возвращает объект DbDataReader для запрошенного порядкового номера столбца, который может быть переопределен с помощью зависящей от поставщика реализации.

(Унаследовано от DbDataReader)
GetDecimal(Int32)

Возвращает значение указанного столбца в виде объекта Decimal.

GetDouble(Int32)

Возвращает значение указанного столбца в виде числа с плавающей запятой двойной точности.

GetEnumerator()

Возвращает перечислитель IEnumerator, который может использоваться для просмотра строк в модуле чтения данных.

GetFieldType(Int32)

Возвращает тип Type, который является типом данных объекта.

GetFieldValue<T>(Int32)

Возвращает значение указанного столбца в виде запрошенного типа.

(Унаследовано от DbDataReader)
GetFieldValueAsync<T>(Int32)

Асинхронно возвращает значение указанного столбца в виде запрошенного типа.

(Унаследовано от DbDataReader)
GetFieldValueAsync<T>(Int32, CancellationToken)

Асинхронно возвращает значение указанного столбца в виде запрошенного типа.

(Унаследовано от DbDataReader)
GetFloat(Int32)

Возвращает значение указанного столбца в виде числа с плавающей запятой с одиночной точностью.

GetGuid(Int32)

Возвращает значение заданного столбца в виде глобально-уникального идентификатора GUID.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetInt16(Int32)

Получает значение заданного столбца в виде 16-битового целого числа со знаком.

GetInt32(Int32)

Возвращает значение указанного столбца в виде 32-разрядного целого числа со знаком.

GetInt64(Int32)

Возвращает значение указанного столбца в виде 64-разрядного целого числа со знаком.

GetLifetimeService()
Устаревшие..

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

(Унаследовано от MarshalByRefObject)
GetName(Int32)

Возвращает имя заданного столбца.

GetOracleBFile(Int32)

Получает значение заданного столбца в виде объекта OracleBFile.

GetOracleBinary(Int32)

Получает значение заданного столбца в виде объекта OracleBinary.

GetOracleDateTime(Int32)

Получает значение заданного столбца в виде объекта OracleDateTime.

GetOracleLob(Int32)

Получает значение заданного столбца в виде объекта OracleLob.

GetOracleMonthSpan(Int32)

Получает значение заданного столбца в виде объекта OracleMonthSpan.

GetOracleNumber(Int32)

Получает значение заданного столбца в виде объекта OracleNumber.

GetOracleString(Int32)

Получает значение заданного столбца в виде объекта OracleString.

GetOracleTimeSpan(Int32)

Получает значение заданного столбца в виде объекта OracleTimeSpan.

GetOracleValue(Int32)

Возвращает значение столбца в виде заданного порядкового номера в формате Oracle.

GetOracleValues(Object[])

Возвращает все столбцы атрибутов в текущей строке в формате Oracle.

GetOrdinal(String)

Возвращает порядковый номер столбца при наличии заданного имени столбца.

GetProviderSpecificFieldType(Int32)

Получает Object, который представляет собой конкретный тип поля базового поставщика.

GetProviderSpecificValue(Int32)

Получает Object, который представляет собой конкретный тип поля базового поставщика.

GetProviderSpecificValues(Object[])

Возвращает массив объектов, которые представляют собой значения типа, специфического для базового поставщика.

GetSchemaTable()

Возвращает DataTable, описывающий метаданные о столбцах OracleDataReader.

GetSchemaTableAsync(CancellationToken)

Это асинхронная версия метода GetSchemaTable(). Поставщики должны выполнить переопределение с помощью соответствующей реализации. При необходимости можно учитывать cancellationToken. Реализация по умолчанию вызывает синхронный метод GetSchemaTable() и возвращает выполненную задачу. Реализация по умолчанию возвращает отмененную задачу, если ей передается уже отмененный cancellationToken. Исключения, создаваемые GetSchemaTable(), будут связаны через возвращаемое свойство исключения задачи.

(Унаследовано от DbDataReader)
GetStream(Int32)

Возвращает поток для получения данных из указанного столбца.

(Унаследовано от DbDataReader)
GetString(Int32)

Возвращает значение заданного столбца в виде строки.

GetTextReader(Int32)

Получает модуль чтения текста для извлечения данных из столбца.

(Унаследовано от DbDataReader)
GetTimeSpan(Int32)

Возвращает значение заданного столбца в виде объекта System.TimeSpan.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
GetValue(Int32)

Получает значение столбца с указанным порядковом номером в собственном формате.

GetValues(Object[])

Заполняет массив объектов значениями столбцов текущей строки.

InitializeLifetimeService()
Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
IsDBNull(Int32)

Получает значение, указывающее, содержит ли столбец несуществующие или пропущенные значения.

IsDBNullAsync(Int32)

Асинхронно получает значение, указывающее, содержит ли столбец несуществующие или пропущенные значения.

(Унаследовано от DbDataReader)
IsDBNullAsync(Int32, CancellationToken)

Асинхронно получает значение, указывающее, содержит ли столбец несуществующие или пропущенные значения.

(Унаследовано от DbDataReader)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.

(Унаследовано от MarshalByRefObject)
NextResult()

Перемещает OracleDataReader к следующему результату.

NextResultAsync()

Асинхронно перемещает модуль чтения данных к следующему результату при чтении результатов из пакета инструкций.

(Унаследовано от DbDataReader)
NextResultAsync(CancellationToken)

Асинхронно перемещает модуль чтения данных к следующему результату при чтении результатов из пакета инструкций.

(Унаследовано от DbDataReader)
Read()

Перемещает OracleDataReader к следующей записи.

ReadAsync()

Асинхронно перемещает модуль чтения к следующей записи в результирующем наборе.

(Унаследовано от DbDataReader)
ReadAsync(CancellationToken)

Асинхронно перемещает модуль чтения к следующей записи в результирующем наборе.

(Унаследовано от DbDataReader)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

IDataRecord.GetData(Int32)

Описание этого члена см. в разделе GetData(Int32).

(Унаследовано от DbDataReader)
IEnumerable.GetEnumerator()

Возвращает перечислитель, который осуществляет итерацию по коллекции.

Методы расширения

CanGetColumnSchema(DbDataReader)

Получает значение, которое указывает, может ли DbDataReader получить схему столбца.

GetColumnSchema(DbDataReader)

Получает схему столбца (коллекцию DbColumn) для DbDataReader.

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к