OracleLob.Read(Byte[], Int32, Int32) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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 LOB
befindet.
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.