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

Definition

Schreibt eine Bytesequenz in den aktuellen OracleLob Datenstrom und wechselt die aktuelle Position innerhalb dieses Datenstroms um die Anzahl der geschriebenen Bytes.

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 Anzahl von Bytes, die in count dem buffer aktuellen Datenstrom angegeben sind.

offset
Int32

Der nullbasierte Byte-Offset, in buffer dem mit dem Kopieren von Bytes in den aktuellen Datenstrom begonnen werden soll. Für CLOB und NCLOB Datentypen muss dies eine gerade Zahl sein.

count
Int32

Die Anzahl der Bytes, die in den aktuellen Datenstrom geschrieben werden sollen. Für CLOB und NCLOB Datentypen muss dies eine gerade Zahl sein.

Ausnahmen

Der Parameter buffer ist ein Nullverweis (Nothing in Visual Basic).

Ein Wert im offset Oder count Parameter ist nicht positiv.

-oder-

Die Summe der offset Und-Parameter count ist größer als die buffer Länge.

-oder-

Ein wert, der count im Oder offset Parameter angegeben ist, ist kleiner als 0 oder größer als 4 Gigabyte.

-oder-

Sie müssen Datentypen als gerade Anzahl von Bytes angeben CLOB und NCLOB angeben.

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

Wenn der Schreibvorgang erfolgreich ist, wechselt die Position innerhalb des Datenstroms um die Anzahl der geschriebenen Bytes. Wenn eine Ausnahme auftritt, bleibt die Position innerhalb des Datenstroms unverändert.

Das Schreiben über das Ende hinaus LOB ist zulässig und vergrößert die LOB Anzahl der geschriebenen Bytes.

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 Write Vorgang ausführen, geben Sie die Länge der Zeichenfolge als 6 Byte an, obwohl sie auf dem Server als 12 Bytes gespeichert ist.

Um in das LOBElement zu schreiben, müssen Sie die Verwendung der LOB FOR UPDATE-Klausel in der SQL SELECT-Anweisung abgerufen haben, und Sie müssen eine lokale Transaktion gestartet haben.

Im folgenden Beispiel wird das Schreiben in OracleLob Objekte veranschaulicht:

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

Note

Ein Schreibvorgang in einen schreibgeschützten LOB Vorgang kann erfolgreich ausgeführt werden, aktualisiert jedoch nicht den LOB Server. In diesem Fall wird jedoch die lokale Kopie der Datei LOB aktualisiert. Daher können später Lesevorgänge für das OracleLob Objekt die Ergebnisse des Schreibvorgangs zurückgeben.

Gilt für: