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 Abfolge von Bytes aus dem aktuellen OracleLob Datenstrom und wechselt die Position innerhalb des Datenstroms um die Anzahl der gelesenen Bytes.
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. Wenn diese Methode zurückgegeben wird, enthält der Puffer das angegebene Bytearray, wobei die Werte zwischen offset und (offset + count) durch die aus der aktuellen Quelle gelesenen Bytes ersetzt werden.
- offset
- Int32
Der nullbasierte Byte-Offset, in buffer dem die Daten gespeichert werden sollen, die aus dem aktuellen Datenstrom gelesen werden. Für CLOB und NCLOB Datentypen muss dies eine gerade Zahl sein.
- count
- Int32
Die maximale Anzahl von Bytes, die aus dem aktuellen Datenstrom gelesen werden sollen. Für CLOB und NCLOB Datentypen muss dies eine gerade Zahl sein.
Gibt zurück
Die Gesamtanzahl der in den Puffer gelesenen Bytes. Dies kann kleiner als die Anzahl der angeforderten Bytes sein, wenn viele Bytes derzeit nicht verfügbar sind, oder Null (0), wenn das Ende des Datenstroms erreicht wurde.
Ausnahmen
Die buffer ist ein Nullverweis (Nothing in Visual Basic).
Ein Wert im offset Oder count Parameter ist nicht positiv.
-oder-
Die Summe der Offset- und Anzahlparameter ist größer als die Pufferlänge.
-oder-
Ein wert, der offset im Parameter angegeben ist, ist kleiner als null oder größer als 4 Gigabyte.
Der Vorgang befindet sich nicht innerhalb einer Transaktion, das OracleLob Objekt ist NULL, oder die Verbindung wird geschlossen.
Das Objekt wurde geschlossen oder verworfen.
Ein Oracle-Fehler ist aufgetreten.
Hinweise
Die Read Methode liest maximal count Bytes aus dem aktuellen Datenstrom und speichert sie beginnend buffer bei offset. Die aktuelle Position innerhalb des Datenstroms wird um die Anzahl der gelesenen Bytes erweitert; Wenn jedoch eine Ausnahme auftritt, bleibt die aktuelle Position innerhalb des Datenstroms unverändert.
Read gibt die Anzahl der gelesenen Bytes zurück. Der Rückgabewert ist nur null, wenn sich die Position aktuell am Ende des Datenstroms befindet.
Read wird blockiert, bis mindestens ein Byte von Daten gelesen werden kann, falls keine Daten verfügbar sind.Read gibt 0 zurück, wenn Sie versuchen, von einer LOB zu lesen, wenn sich die aktuelle Position am Ende von LOB.
Read kann weniger Bytes zurückgeben als angefordert, auch wenn das Ende des Datenstroms nicht erreicht wurde.
Das .NET Framework-Datenanbieter für Oracle verarbeitet alle CLOB und NCLOB-Daten als Unicode. Daher behandeln Sie beim Zugriff auf CLOB und NCLOB Datentypen immer die Anzahl der Bytes, wobei jedes Zeichen 2 Byte ist. Wenn beispielsweise eine Zeichenfolge mit drei Zeichen als NCLOB ein Oracle-Server gespeichert wird, auf dem der Zeichensatz 4 Byte pro Zeichen ist und Sie einen Read Vorgang ausführen, geben Sie die Länge der Zeichenfolge als 6 Byte an, obwohl sie auf dem Server als 12 Bytes gespeichert ist.
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 Null-Steuerelement OracleLob mit diesem Format erstellen:
OracleLob myLob = OracleLob.Null;
Diese Technik 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)
Ein NULL-Wert LOB verhält sich ähnlich wie ein Nullbyte LOB , das Read erfolgreich ist und immer null Bytes zurückgibt.