OracleLob.Write(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.
Schreibt eine Folge von Bytes in den aktuellen OracleLob-Stream und verschiebt die aktuelle Position in diesem Stream um die Anzahl der geschrieben Bytes nach vorn.
public:
override void Write(cli::array <System::Byte> ^ buffer, int offset, int count);
public override void Write (byte[] buffer, int offset, int count);
override this.Write : byte[] * int * int -> unit
Public Overrides Sub Write (buffer As Byte(), offset As Integer, count As Integer)
Parameter
- buffer
- Byte[]
Ein Bytearray. Diese Methode kopiert die in count
angegebene Anzahl von Bytes aus dem buffer
in den aktuellen Stream.
- offset
- Int32
Der nullbasierte Byteoffset im buffer
, ab dem Bytes in den aktuellen Stream kopiert werden. Bei CLOB
-Datentypen und NCLOB
-Datentypen muss dies eine gerade Zahl sein.
- count
- Int32
Die Anzahl an Bytes, die in den aktuellen Stream geschrieben werden sollen. Bei CLOB
-Datentypen und NCLOB
-Datentypen muss dies eine gerade Zahl sein.
Ausnahmen
Der buffer
-Parameter 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 buffer
-Länge.
- oder -
Ein im count
-Parameter oder im offset
-Parameter angegebener Wert ist kleiner als 0 (null) oder größer als 4 Gigabyte.
- oder -
Sie müssen CLOB
-Datentypen und NCLOB
-Datentypen als gerade Anzahl von Bytes angeben.
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
Wenn der Schreibvorgang erfolgreich ist, wird die Position innerhalb des Datenstroms um die Anzahl der geschriebenen Bytes erhöht. Wenn eine Ausnahme auftritt, bleibt die Position im Stream unverändert.
Das Schreiben über das Ende von LOB
hinaus ist zulässig und vergrößert den LOB
um die Anzahl der geschriebenen Bytes.
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 Write
Vorgang ausführen, geben Sie die Länge der Zeichenfolge als 6 Bytes an, obwohl sie als 12 Bytes auf dem Server gespeichert wird.
Um in den zu LOB
schreiben, müssen Sie die LOB
mithilfe der FOR UPDATE-Klausel in der SQL SELECT-Anweisung abgerufen haben, und Sie müssen eine lokale Transaktion gestartet haben.
Im folgenden Beispiel wird veranschaulicht, wie in Objekte geschrieben wird OracleLob :
public static void WriteLobExample(OracleCommand command)
{
// Note: Updating LOB data requires a transaction.
command.Transaction = command.Connection.BeginTransaction();
// Select some data.
// Table Schema:
// "CREATE TABLE tablewithlobs (a int, b BLOB, c BLOB)";
// "INSERT INTO tablewithlobs values (1, 'AA', 'AAA')";
command.CommandText = "SELECT * FROM TableWithLobs FOR UPDATE";
OracleDataReader reader = command.ExecuteReader();
using(reader)
{
// Obtain the first row of data.
reader.Read();
// Obtain both LOBs.
OracleLob BLOB1 = reader.GetOracleLob(1);
OracleLob BLOB2 = reader.GetOracleLob(2);
// Perform any desired operations on the LOB, (read, position, and so on).
// ...
// Example - Writing binary data (directly to the backend).
// To write, you can use any of the stream classes, or write raw binary data using
// the OracleLob write method. Writing character vs. binary is the same;
// however note that character is always in terms of Unicode byte counts
// (for example: even number of bytes - 2 bytes for every Unicode character).
var buffer = new byte[100];
buffer[0] = 0xCC;
buffer[1] = 0xDD;
BLOB1.Write(buffer, 0, 2);
BLOB1.Position = 0;
Console.WriteLine(BLOB1.LobType + ".Write(" + buffer + ", 0, 2) => " + BLOB1.Value);
// Example - Copying data into another LOB.
long actual = BLOB1.CopyTo(BLOB2);
Console.WriteLine(BLOB1.LobType + ".CopyTo(" + BLOB2.Value + ") => " + actual);
// Commit the transaction now that everything succeeded.
// Note: On error, Transaction.Dispose is called (from the using statement)
// and will automatically roll-back the pending transaction.
command.Transaction.Commit();
}
}
Hinweis
Ein Schreibvorgang für einen schreibgeschützten LOB
Vorgang kann erfolgreich sein, aktualisiert aber nicht den LOB
auf dem Server. In diesem Fall wird jedoch die lokale Kopie des LOB
aktualisiert. Daher können spätere Lesevorgänge für das OracleLob Objekt die Ergebnisse des Schreibvorgangs zurückgeben.