Teilen über


OracleDataReader Klasse

Definition

Bietet ein Verfahren für das Lesen eines Vorwärtsstreams von Datenzeilen aus einer Datenquelle. Diese Klasse kann nicht vererbt werden.

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
Vererbung
OracleDataReader
Vererbung
Implementiert

Beispiele

Im folgenden Beispiel werden ein OracleConnection, ein OracleCommandund ein OracleDataReadererstellt. Im Beispiel werden die Daten gelesen und in die Konsole geschrieben. Schließlich schließt das Beispiel die OracleDataReader- und dann die 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

Hinweise

Um eine OracleDataReaderzu erstellen, müssen Sie die ExecuteReader -Methode des OracleCommand -Objekts aufrufen, anstatt direkt einen Konstruktor zu verwenden.

Änderungen, die von einem anderen Prozess oder Thread an einem Resultset vorgenommen werden, während Daten gelesen werden, können für den Benutzer des OracleDataReadersichtbar sein.

IsClosed und RecordsAffected sind die einzigen Eigenschaften, die nach dem Schließen von OracleDataReader aufgerufen werden können. In einigen Fällen müssen Sie aufrufen Close , bevor Sie aufrufen RecordsAffectedkönnen.

OracleDataReader Mehrere können jederzeit geöffnet sein.

Die folgenden beiden Visual Basic-Beispiele veranschaulichen, wie ein OracleDataReader verwendet wird, um ein Oracle REF CURSORabzurufen. In diesen Beispielen werden Tabellen verwendet, die im Oracle Scott/Tiger-Schema definiert sind und den folgenden PL/SQL-Paket- und Pakettext erfordern. Sie müssen diese auf Ihrem Server erstellen, um die Beispiele zu verwenden.

Erstellen Sie das folgende Oracle-Paket auf dem Oracle-Server.

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;  
/  

Erstellen Sie den folgenden Oracle-Paketkörper auf dem Oracle-Server.

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;  
/  

In diesem Visual Basic-Beispiel wird eine gespeicherte PL/SQL-Prozedur ausgeführt, die einen REF CURSOR Parameter zurückgibt und den Wert als liest 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  

Dieses Visual Basic-Beispiel führt eine gespeicherte PL/SQL-Prozedur aus, die zwei REF CURSOR Parameter zurückgibt, und liest die Werte mithilfe eines 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  

In diesem C#-Beispiel wird eine Oracle-Tabelle erstellt und mit Daten geladen. Sie müssen dieses Beispiel ausführen, bevor Sie das nachfolgende Beispiel ausführen, in dem die Verwendung eines OracleDataReader für den Zugriff auf die Daten mithilfe von OracleType-Strukturen veranschaulicht wird.

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

In diesem C#-Beispiel wird ein OracleDataReader verwendet, um auf Daten zuzugreifen, und es werden mehrere OracleType Strukturen zum Anzeigen der Daten verwendet.

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

Eigenschaften

Depth

Ruft einen Wert ab, der die Tiefe der Schachtelung für die aktuelle Zeile angibt.

FieldCount

Ruft die Anzahl der Spalten in der aktuellen Zeile ab.

HasRows

Ruft einen Wert ab, der angibt, ob OracleDataReader eine oder mehrere Zeilen enthält.

IsClosed

Gibt an, ob OracleDataReader geschlossen ist.

Item[Int32]

Ruft bei angegebener Spaltenordnungszahl den Wert der angegebenen Spalte im systemeigenen Format ab.

Item[String]

Ruft bei angegebenem Spaltennamen den Wert der angegebenen Spalte im systemeigenen Format ab.

RecordsAffected

Ruft die Anzahl der durch die Ausführung der SQL-Anweisung geänderten, eingefügten oder gelöschten Zeilen ab.

VisibleFieldCount

Ruft die Anzahl der nicht ausgeblendeten Felder im DbDataReader ab.

(Geerbt von DbDataReader)

Methoden

Close()

Schließt das OracleDataReader-Objekt.

CloseAsync()

Schließt das DbDataReader-Objekt asynchron

(Geerbt von DbDataReader)
CreateObjRef(Type)

Erstellt ein Objekt mit allen relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.

(Geerbt von MarshalByRefObject)
Dispose()

Gibt die vom Objekt verwendeten Ressourcen frei.

Dispose()

Gibt alle von der aktuellen Instanz der DbDataReader-Klasse verwendeten Ressourcen frei.

(Geerbt von DbDataReader)
Dispose(Boolean)

Gibt die von DbDataReader verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

(Geerbt von DbDataReader)
DisposeAsync()

Gibt alle von der aktuellen Instanz der DbDataReader-Klasse verwendeten Ressourcen asynchron frei.

(Geerbt von DbDataReader)
Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetBoolean(Int32)

Ruft den Wert der angegebenen Spalte als booleschen Wert ab.

GetByte(Int32)

Ruft den Wert der angegebenen Spalte als ein Byte ab.

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

Liest einen Datenstrom aus dem angegebenen Spaltenoffset als Array in den Puffer, beginnend am angegebenen Pufferoffset.

GetChar(Int32)

Ruft den Wert der angegebenen Spalte als Zeichen ab.

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

Liest einen Zeichendatenstrom aus dem angegebenen Spaltenoffset als Array in den Puffer, beginnend am angegebenen Pufferoffset.

GetColumnSchemaAsync(CancellationToken)

Dies ist die asynchrone Version von GetColumnSchema(DbDataReader). Anbieter sollten mit einer entsprechenden Implementierung überschreiben. Das cancellationToken kann optional berücksichtigt werden. Die Standardimplementierung ruft den asynchronen GetColumnSchema(DbDataReader)-Aufruf auf und gibt eine abgeschlossene Aufgabe zurück. Die Standardimplementierung gibt eine abgebrochene Aufgabe zurück, wenn sie einen bereits abgebrochenen cancellationToken erhalten wird. Die Ausnahmen, die von GetColumnSchema(DbDataReader) ausgelöst werden, werden über die zurückgegebene Task Exception-Eigenschaft übermittelt.

(Geerbt von DbDataReader)
GetData(Int32)

Gibt einen IDataReader für die angegebene Spaltenordnungszahl zurück.

GetData(Int32)

Gibt einen verschachtelten Datenreader für die angeforderte Spalte zurück.

(Geerbt von DbDataReader)
GetDataTypeName(Int32)

Ruft den Namen des Quelldatentyps ab.

GetDateTime(Int32)

Ruft den Wert der angegebenen Spalte als DateTime-Objekt ab.

GetDbDataReader(Int32)

Gibt ein DbDataReader-Objekt für die angeforderte Spaltenordnungszahl zurück, das mit einer anbieterspezifischen Implementierung überschrieben werden kann.

(Geerbt von DbDataReader)
GetDecimal(Int32)

Ruft den Wert der angegebenen Spalte als Decimal-Objekt ab.

GetDouble(Int32)

Ruft den Wert der angegebenen Spalte als Gleitkommazahl mit doppelter Genauigkeit ab.

GetEnumerator()

Gibt einen IEnumerator zurück, mit dem die Zeilen im Datenleser durchlaufen werden können.

GetFieldType(Int32)

Ruft den Type ab, der den Datentyp des Objekts darstellt.

GetFieldValue<T>(Int32)

Ruft den Wert der angegebenen Spalte als angeforderten Typ ab.

(Geerbt von DbDataReader)
GetFieldValueAsync<T>(Int32)

Ruft den Wert der angegebenen Spalte asynchron als angeforderten Typ ab.

(Geerbt von DbDataReader)
GetFieldValueAsync<T>(Int32, CancellationToken)

Ruft den Wert der angegebenen Spalte asynchron als angeforderten Typ ab.

(Geerbt von DbDataReader)
GetFloat(Int32)

Ruft den Wert der angegebenen Spalte als Gleitkommazahl mit einfacher Genauigkeit ab.

GetGuid(Int32)

Ruft den Wert der angegebenen Spalte als global eindeutigen Bezeichner (Globally Unique Identifier, GUID) ab.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetInt16(Int32)

Ruft den Wert der angegebenen Spalte als 16-Bit-Ganzzahl mit Vorzeichen ab.

GetInt32(Int32)

Ruft den Wert der angegebenen Spalte als ganze Zahl mit Vorzeichen und einer Länge von 32 Bit ab.

GetInt64(Int32)

Ruft den Wert der angegebenen Spalte als 64-Bit-Ganzzahl mit Vorzeichen ab.

GetLifetimeService()
Veraltet.

Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinien für diese Instanz steuert.

(Geerbt von MarshalByRefObject)
GetName(Int32)

Ruft den Namen der angegebenen Spalte ab.

GetOracleBFile(Int32)

Ruft den Wert der angegebenen Spalte als OracleBFile-Objekt ab.

GetOracleBinary(Int32)

Ruft den Wert der angegebenen Spalte als OracleBinary-Objekt ab.

GetOracleDateTime(Int32)

Ruft den Wert der angegebenen Spalte als OracleDateTime-Objekt ab.

GetOracleLob(Int32)

Ruft den Wert der angegebenen Spalte als OracleLob-Objekt ab.

GetOracleMonthSpan(Int32)

Ruft den Wert der angegebenen Spalte als OracleMonthSpan-Objekt ab.

GetOracleNumber(Int32)

Ruft den Wert der angegebenen Spalte als OracleNumber-Objekt ab.

GetOracleString(Int32)

Ruft den Wert der angegebenen Spalte als OracleString-Objekt ab.

GetOracleTimeSpan(Int32)

Ruft den Wert der angegebenen Spalte als OracleTimeSpan-Objekt ab.

GetOracleValue(Int32)

Ruft den Wert der Spalte an der angegebenen Ordnungszahl im Oracle-Format ab.

GetOracleValues(Object[])

Ruft alle Attributspalten in der aktuellen Zeile im Oracle-Format ab.

GetOrdinal(String)

Ruft bei angegebenem Spaltennamen die Ordnungszahl der Spalte ab.

GetProviderSpecificFieldType(Int32)

Ruft ein Object ab, das eine Darstellung des Feldtyps ist, der für den zugrunde liegenden Anbieter spezifisch ist.

GetProviderSpecificValue(Int32)

Ruft ein Object ab, das eine Darstellung des Feldtyps ist, der für den zugrunde liegenden Anbieter spezifisch ist.

GetProviderSpecificValues(Object[])

Ruft ein Array von Objekten ab, die die Werte darstellen, die für den zugrunde liegenden Anbieter spezifisch sind.

GetSchemaTable()

Gibt eine DataTable zurück, die die Spaltenmetadaten des OracleDataReader beschreibt.

GetSchemaTableAsync(CancellationToken)

Dies ist die asynchrone Version von GetSchemaTable(). Anbieter sollten mit einer entsprechenden Implementierung überschreiben. Das cancellationToken kann optional berücksichtigt werden. Die Standardimplementierung ruft den asynchronen GetSchemaTable()-Aufruf auf und gibt eine abgeschlossene Aufgabe zurück. Die Standardimplementierung gibt eine abgebrochene Aufgabe zurück, wenn sie einen bereits abgebrochenen cancellationToken erhalten wird. Die Ausnahmen, die von GetSchemaTable() ausgelöst werden, werden über die zurückgegebene Task Exception-Eigenschaft übermittelt.

(Geerbt von DbDataReader)
GetStream(Int32)

Ruft einen Stream ab, um Daten aus der angegebenen Spalte abzurufen.

(Geerbt von DbDataReader)
GetString(Int32)

Ruft den Wert der angegebenen Spalte als eine Zeichenfolge ab.

GetTextReader(Int32)

Ruft einen Textreader zum Auslesen von Daten aus der Spalte ab.

(Geerbt von DbDataReader)
GetTimeSpan(Int32)

Ruft den Wert der angegebenen Spalte als System.TimeSpan ab.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
GetValue(Int32)

Ruft den Wert der Spalte an der angegebenen Ordnungszahl im systemeigenen Format ab.

GetValues(Object[])

Füllt ein Array von Objekten mit den Spaltenwerten der aktuellen Zeile auf.

InitializeLifetimeService()
Veraltet.

Ruft ein Lebensdauerdienstobjekt zur Steuerung der Lebensdauerrichtlinie für diese Instanz ab.

(Geerbt von MarshalByRefObject)
IsDBNull(Int32)

Ruft einen Wert ab, der angibt, ob die Spalte nicht vorhandene oder fehlende Werte enthält.

IsDBNullAsync(Int32)

Ruft asynchron einen Wert ab, der angibt, ob die Spalte nicht vorhandene oder fehlende Werte enthält.

(Geerbt von DbDataReader)
IsDBNullAsync(Int32, CancellationToken)

Ruft asynchron einen Wert ab, der angibt, ob die Spalte nicht vorhandene oder fehlende Werte enthält.

(Geerbt von DbDataReader)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
MemberwiseClone(Boolean)

Erstellt eine flache Kopie des aktuellen MarshalByRefObject-Objekts.

(Geerbt von MarshalByRefObject)
NextResult()

Positioniert OracleDataReader auf dem nächstem Ergebnis.

NextResultAsync()

Setzt den Datenreader beim Lesen der Ergebnisse von Batchanweisungen asynchron auf das nächste Ergebnis.

(Geerbt von DbDataReader)
NextResultAsync(CancellationToken)

Setzt den Datenreader beim Lesen der Ergebnisse von Batchanweisungen asynchron auf das nächste Ergebnis.

(Geerbt von DbDataReader)
Read()

Setzt den OracleDataReader auf den nächsten Datensatz.

ReadAsync()

Setzt den Reader asynchron auf den nächsten Datensatz in einem Resultset.

(Geerbt von DbDataReader)
ReadAsync(CancellationToken)

Setzt den Reader asynchron auf den nächsten Datensatz in einem Resultset.

(Geerbt von DbDataReader)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Explizite Schnittstellenimplementierungen

IDataRecord.GetData(Int32)

Eine Beschreibung dieses Elements finden Sie unter GetData(Int32).

(Geerbt von DbDataReader)
IEnumerable.GetEnumerator()

Gibt einen Enumerator zurück, der eine Auflistung durchläuft.

Erweiterungsmethoden

CanGetColumnSchema(DbDataReader)

Ruft einen Wert ab, der angibt, ob ein DbDataReader-Objekt ein Spaltenschema haben kann.

GetColumnSchema(DbDataReader)

Ruft das Spaltenschema für ein DbDataReader-Objekt ab (DbColumn-Auflistung).

Cast<TResult>(IEnumerable)

Wandelt die Elemente eines IEnumerable in den angegebenen Typ um

OfType<TResult>(IEnumerable)

Filtert die Elemente eines IEnumerable anhand eines angegebenen Typs

AsParallel(IEnumerable)

Ermöglicht die Parallelisierung einer Abfrage.

AsQueryable(IEnumerable)

Konvertiert einen IEnumerable in einen IQueryable.

Gilt für: