OracleDataReader Classe

Definição

Fornece uma maneira de ler um fluxo somente de encaminhamento de linhas de dados de uma fonte de dados. Essa classe não pode ser herdada.

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
Herança
OracleDataReader
Herança
Implementações

Exemplos

O exemplo a seguir cria um OracleConnection, um OracleCommande um OracleDataReader. O exemplo lê os dados, gravando-os no console. Por fim, o exemplo fecha o OracleDataReader. em seguida, o 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

Comentários

Para criar um OracleDataReader, você deve chamar o ExecuteReader método do objeto, em vez de OracleCommand usar diretamente um construtor.

As alterações feitas em um conjunto de resultados por outro processo ou thread enquanto os dados estão sendo lidos podem estar visíveis para o usuário do OracleDataReader.

IsClosed e RecordsAffected são as únicas propriedades que você pode chamar após o OracleDataReader fechamento. Em alguns casos, você deve ligar Close antes de poder ligar RecordsAffected.

Mais de um OracleDataReader pode ser aberto a qualquer momento.

Os dois exemplos de Visual Basic a seguir demonstram como usar um OracleDataReader para recuperar um Oracle REF CURSOR. Esses exemplos usam tabelas definidas no esquema Oracle Scott/Tiger e exigem o seguinte pacote PL/SQL e o corpo do pacote. Você deve criá-los em seu servidor para usar os exemplos.

Crie o seguinte pacote Oracle no servidor 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;
/

Crie o seguinte corpo do pacote Oracle no servidor 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;
/

Este Visual Basic exemplo executa um procedimento armazenado PL/SQL que retorna um parâmetro REF CURSOR e lê o valor como um 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

Este Visual Basic exemplo executa um procedimento armazenado PL/SQL que retorna dois parâmetros REF CURSOR e lê os valores usando um 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

Este exemplo de C# cria uma tabela Oracle e a carrega com dados. Você deve executar este exemplo antes de executar o exemplo subsequente, que demonstra o uso de um OracleDataReader para acessar os dados usando estruturas 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();
   }
}

Este exemplo de C# usa um OracleDataReader para acessar dados e usa várias OracleType estruturas para exibir os dados.

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();
   }
}

Propriedades

Nome Description
Depth

Obtém um valor que indica a profundidade do aninhamento para a linha atual.

FieldCount

Obtém o número de colunas na linha atual.

HasRows

Obtém um valor que indica se o OracleDataReader contém uma ou mais linhas.

IsClosed

Indica se a origem OracleDataReader está fechada.

Item[Int32]

Obtém o valor da coluna especificada em seu formato nativo, considerando o ordinal da coluna.

Item[String]

Obtém o valor da coluna especificada em seu formato nativo dado o nome da coluna.

RecordsAffected

Obtém o número de linhas alteradas, inseridas ou excluídas pela execução da instrução SQL.

VisibleFieldCount

Obtém o número de campos no DbDataReader que não estão ocultos.

(Herdado de DbDataReader)

Métodos

Nome Description
Close()

Fecha o OracleDataReader objeto.

CreateObjRef(Type)

Cria um objeto que contém todas as informações relevantes necessárias para gerar um proxy usado para se comunicar com um objeto remoto.

(Herdado de MarshalByRefObject)
Dispose()

Libera os recursos usados por esse objeto.

Dispose()

Libera todos os recursos usados pela instância atual da DbDataReader classe.

(Herdado de DbDataReader)
Dispose(Boolean)

Libera os recursos não gerenciados usados pelo DbDataReader e, opcionalmente, libera os recursos gerenciados.

(Herdado de DbDataReader)
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetBoolean(Int32)

Obtém o valor da coluna especificada como um booliano.

GetByte(Int32)

Obtém o valor da coluna especificada como um byte.

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

Lê um fluxo de bytes do deslocamento de coluna especificado para o buffer como uma matriz, começando no deslocamento de buffer fornecido.

GetChar(Int32)

Obtém o valor da coluna especificada como um caractere.

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

Lê um fluxo de caracteres do deslocamento de coluna especificado para o buffer como uma matriz, começando no deslocamento de buffer fornecido.

GetData(Int32)

Retorna um IDataReader para o ordinal de coluna especificado.

GetData(Int32)

Retorna um leitor de dados aninhado para a coluna solicitada.

(Herdado de DbDataReader)
GetDataTypeName(Int32)

Obtém o nome do tipo de dados de origem.

GetDateTime(Int32)

Obtém o valor da coluna especificada como um DateTime objeto.

GetDbDataReader(Int32)

Retorna um DbDataReader objeto para o ordinal de coluna solicitado que pode ser substituído por uma implementação específica do provedor.

(Herdado de DbDataReader)
GetDecimal(Int32)

Obtém o valor da coluna especificada como um Decimal objeto.

GetDouble(Int32)

Obtém o valor da coluna especificada como um número de ponto flutuante de precisão dupla.

GetEnumerator()

Retorna um IEnumerator que pode ser usado para iterar por meio das linhas no leitor de dados.

GetFieldType(Int32)

Obtém o Type tipo de dados do objeto.

GetFieldValue<T>(Int32)

Obtém o valor da coluna especificada como o tipo solicitado.

(Herdado de DbDataReader)
GetFieldValueAsync<T>(Int32, CancellationToken)

Obtém de forma assíncrona o valor da coluna especificada como o tipo solicitado.

(Herdado de DbDataReader)
GetFieldValueAsync<T>(Int32)

Obtém de forma assíncrona o valor da coluna especificada como o tipo solicitado.

(Herdado de DbDataReader)
GetFloat(Int32)

Obtém o valor da coluna especificada como um número de ponto flutuante de precisão única.

GetGuid(Int32)

Obtém o valor da coluna especificada como um GUID (identificador global exclusivo).

GetHashCode()

Serve como a função hash predefinida.

(Herdado de Object)
GetInt16(Int32)

Obtém o valor da coluna especificada como um inteiro com sinal de 16 bits.

GetInt32(Int32)

Obtém o valor da coluna especificada como um inteiro com sinal de 32 bits.

GetInt64(Int32)

Obtém o valor da coluna especificada como um inteiro com sinal de 64 bits.

GetLifetimeService()

Recupera o objeto de serviço de tempo de vida atual que controla a política de tempo de vida para essa instância.

(Herdado de MarshalByRefObject)
GetName(Int32)

Obtém o nome da coluna especificada.

GetOracleBFile(Int32)

Obtém o valor da coluna especificada como um OracleBFile objeto.

GetOracleBinary(Int32)

Obtém o valor da coluna especificada como um OracleBinary objeto.

GetOracleDateTime(Int32)

Obtém o valor da coluna especificada como um OracleDateTime objeto.

GetOracleLob(Int32)

Obtém o valor da coluna especificada como um OracleLob objeto.

GetOracleMonthSpan(Int32)

Obtém o valor da coluna especificada como um OracleMonthSpan objeto.

GetOracleNumber(Int32)

Obtém o valor da coluna especificada como um OracleNumber objeto.

GetOracleString(Int32)

Obtém o valor da coluna especificada como um OracleString objeto.

GetOracleTimeSpan(Int32)

Obtém o valor da coluna especificada como um OracleTimeSpan objeto.

GetOracleValue(Int32)

Obtém o valor da coluna no ordinal especificado em seu formato Oracle.

GetOracleValues(Object[])

Obtém todas as colunas de atributo na linha atual no formato Oracle.

GetOrdinal(String)

Obtém o ordinal de coluna, dado o nome da coluna.

GetProviderSpecificFieldType(Int32)

Obtém uma Object representação do tipo de campo específico do provedor subjacente.

GetProviderSpecificValue(Int32)

Obtém uma Object representação do tipo de campo específico do provedor subjacente.

GetProviderSpecificValues(Object[])

Obtém uma matriz de objetos que são uma representação dos valores específicos do provedor subjacente.

GetSchemaTable()

Retorna um DataTable que descreve os metadados de coluna do OracleDataReader.

GetStream(Int32)

Obtém um fluxo para recuperar dados da coluna especificada.

(Herdado de DbDataReader)
GetString(Int32)

Obtém o valor da coluna especificada como uma cadeia de caracteres.

GetTextReader(Int32)

Obtém um leitor de texto para recuperar dados da coluna.

(Herdado de DbDataReader)
GetTimeSpan(Int32)

Obtém o valor da coluna especificada como um System.TimeSpan.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetValue(Int32)

Obtém o valor da coluna no ordinal especificado em seu formato nativo.

GetValues(Object[])

Popula uma matriz de objetos com os valores de coluna da linha atual.

InitializeLifetimeService()

Obtém um objeto de serviço de tempo de vida para controlar a política de tempo de vida dessa instância.

(Herdado de MarshalByRefObject)
IsDBNull(Int32)

Obtém um valor que indica se a coluna contém valores inexistentes ou ausentes.

IsDBNullAsync(Int32, CancellationToken)

Obtém de forma assíncrona um valor que indica se a coluna contém valores inexistentes ou ausentes.

(Herdado de DbDataReader)
IsDBNullAsync(Int32)

Obtém de forma assíncrona um valor que indica se a coluna contém valores inexistentes ou ausentes.

(Herdado de DbDataReader)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
MemberwiseClone(Boolean)

Cria uma cópia superficial do objeto atual MarshalByRefObject .

(Herdado de MarshalByRefObject)
NextResult()

Avança para o OracleDataReader próximo resultado.

NextResultAsync()

Avança de forma assíncrona o leitor para o próximo resultado ao ler os resultados de um lote de instruções.

(Herdado de DbDataReader)
NextResultAsync(CancellationToken)

Avança de forma assíncrona o leitor para o próximo resultado ao ler os resultados de um lote de instruções.

(Herdado de DbDataReader)
Read()

Avança para o OracleDataReader próximo registro.

ReadAsync()

Avança de forma assíncrona o leitor para o próximo registro em um conjunto de resultados.

(Herdado de DbDataReader)
ReadAsync(CancellationToken)

Avança de forma assíncrona o leitor para o próximo registro em um conjunto de resultados.

(Herdado de DbDataReader)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
IDataRecord.GetData(Int32)

Para obter uma descrição deste membro, consulte GetData(Int32).

(Herdado de DbDataReader)
IEnumerable.GetEnumerator()

Retorna um enumerador que itera por meio de uma coleção.

Métodos de Extensão

Nome Description
AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

CanGetColumnSchema(DbDataReader)

Obtém um valor que indica se um DbDataReader pode obter um esquema de coluna.

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

GetColumnSchema(DbDataReader)

Obtém o esquema de coluna (DbColumn coleção) para um DbDataReader.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

Aplica-se a