OracleLob.Read(Byte[], Int32, Int32) Methode

Definition

Liest eine Folge von Bytes aus dem aktuellen OracleLob-Stream und verschiebt die Position im Stream um die Anzahl der gelesen Bytes nach vorn.

public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Parameter

buffer
Byte[]

Ein Bytearray. Nach dem Beenden dieser Methode enthält der Puffer das angegebene Bytearray mit den Werten zwischen offset und (offset + count), die durch aus der aktuellen Quelle gelesene Bytes ersetzt wurden.

offset
Int32

Der nullbasierte Byteoffset im buffer, ab dem die aus dem aktuellen Stream gelesenen Daten gespeichert werden. Bei CLOB-Datentypen und NCLOB-Datentypen muss dies eine gerade Zahl sein.

count
Int32

Die maximale Anzahl an Bytes, die aus dem aktuellen Stream gelesen werden sollen. Bei CLOB-Datentypen und NCLOB-Datentypen muss dies eine gerade Zahl sein.

Gibt zurück

Die Gesamtanzahl der in den Puffer gelesenen Bytes. Dies kann weniger als die Anzahl der angeforderten Bytes sein, wenn diese Anzahl an Bytes derzeit nicht verfügbar ist, oder 0, wenn das Streamende erreicht ist.

Ausnahmen

buffer ist ein NULL-Verweis (Nothing in Visual Basic).

Ein im offset-Parameter oder im count-Parameter angegebener Wert ist nicht positiv.

- oder -

Die Summe des offset-Parameters und des count-Parameters ist größer als die Pufferlänge.

- oder -

Ein im amount-Parameter oder im offset-Parameter angegebener Wert ist kleiner als 0 (null) oder größer als 4 Gigabyte.

Die Operation befindet sich nicht innerhalb einer Transaktion, das OracleLob-Objekt ist NULL, oder die Verbindung ist geschlossen.

Das Objekt war geschlossen oder freigegeben.

Es ist ein Oracle-Fehler aufgetreten.

Hinweise

Die Read -Methode liest maximal count Bytes aus dem aktuellen Stream und speichert sie am buffer Anfang unter offset. Die aktuelle Position im Stream wird um die Anzahl der gelesenen Bytes erweitert. Wenn jedoch eine Ausnahme auftritt, bleibt die aktuelle Position im Stream unverändert. Read gibt die Anzahl der gelesenen Bytes zurück. Der Rückgabewert ist nur 0, wenn sich die Position derzeit am Ende des Datenstroms befindet. Read blockiert, bis mindestens ein Byte daten gelesen werden kann, falls keine Daten verfügbar sind.Read gibt 0 zurück, wenn Sie versuchen, aus einem LOB zu lesen, wenn sich die aktuelle Position am Ende von LOBbefindet. Read kann weniger Bytes zurückgeben als angefordert, auch wenn das Ende des Datenstroms nicht erreicht wurde.

Der .NET Framework-Datenanbieter für Oracle verarbeitet alle CLOB Daten und NCLOB daten als Unicode. Daher haben Sie beim Zugriff auf CLOB und NCLOB Datentypen immer mit der Anzahl von Bytes zu tun, wobei jedes Zeichen 2 Bytes ist. Wenn beispielsweise eine Textzeichenfolge mit drei Zeichen als eine NCLOB auf einem Oracle-Server gespeichert wird, auf dem der Zeichensatz 4 Bytes pro Zeichen ist, und Sie einen Read Vorgang ausführen, geben Sie die Länge der Zeichenfolge als 6 Bytes an, obwohl sie als 12 Bytes auf dem Server gespeichert wird.

Im folgenden Beispiel wird veranschaulicht, wie Objekte gelesen OracleLob werden.

public static void ReadLobExample(OracleCommand command)  
{  
    int actual = 0;  

    // Select some data.  
    // Table Schema:  
    //  "CREATE TABLE TableWithLobs (a int, b BLOB, c CLOB, d NCLOB)";  
    //  "INSERT INTO TableWithLobs values (1, 'AA', 'AAA', N'AAAA')";  
    command.CommandText = "SELECT * FROM TableWithLobs";  
    OracleDataReader reader = command.ExecuteReader();  
    using(reader)  
    {  
        // Obtain the first row of data.  
        reader.Read();  
        // Obtain the LOBs (all 3 varieties).  
        OracleLob BLOB = reader.GetOracleLob(1);  
        OracleLob CLOB  = reader.GetOracleLob(2);  
        OracleLob NCLOB = reader.GetOracleLob(3);  

        // Example - Reading binary data (in chunks).  
        var buffer = new byte[100];  
        while((actual = BLOB.Read(buffer, 0, buffer.Length)) > 0)  
            Console.WriteLine(BLOB.LobType + ".Read(" + buffer + ", " + buffer.Length + ") => " + actual);  

        // Example - Reading CLOB/NCLOB data (in chunks).  
        // Note: You can read character data as raw Unicode bytes (using OracleLob.Read as in the above example).  
        // However, because the OracleLob object inherits directly from the.NET stream object,   
        // all the existing classes that manipulate streams can also be used. For example, the   
        // .NET StreamReader makes converting the raw bytes into actual characters easier.  
        var streamreader = new StreamReader(CLOB, Encoding.Unicode);  
        var cbuffer = new char[100];  
        while((actual = streamreader.Read(cbuffer, 0, cbuffer.Length)) >0)  
            Console.WriteLine(CLOB.LobType + ".Read(" + new string(cbuffer, 0, actual) + ", " + cbuffer.Length + ") => " + actual);  

        //Example - Reading data (all at once).  
        //You could use StreamReader.ReadToEnd to obtain all the string data,or simply  
        //call OracleLob.Value to obtain a contiguous allocation of all the data.  
        Console.WriteLine(NCLOB.LobType + ".Value => " + NCLOB.Value);  
    }  
}  

Sie können ein OracleLob NULL-Objekt mit folgendem Format erstellen:

OracleLob myLob = OracleLob.Null;  

Dieses Verfahren wird hauptsächlich verwendet, um zu testen, ob ein LOB vom Server zurückgegebener WERT NULL ist, wie das folgende Beispiel veranschaulicht.

if (myLob == OracleLob.Null)  

LOB Null verhält sich ähnlich wie ein Nullbyte LOB in, das Read erfolgreich ist, und gibt immer null Bytes zurück.

Gilt für: