Freigeben über


OracleLob.Write-Methode

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.

Namespace: System.Data.OracleClient
Assembly: System.Data.OracleClient (in system.data.oracleclient.dll)

Syntax

'Declaration
Public Overrides Sub Write ( _
    buffer As Byte(), _
    offset As Integer, _
    count As Integer _
)
'Usage
Dim instance As OracleLob
Dim buffer As Byte()
Dim offset As Integer
Dim count As Integer

instance.Write(buffer, offset, count)
public override void Write (
    byte[] buffer,
    int offset,
    int count
)
public:
virtual void Write (
    array<unsigned char>^ buffer, 
    int offset, 
    int count
) override
public void Write (
    byte[] buffer, 
    int offset, 
    int count
)
public override function Write (
    buffer : byte[], 
    offset : int, 
    count : int
)

Parameter

  • buffer
    Ein Bytearray. Diese Methode kopiert die in count angegebene Anzahl von Bytes aus dem buffer in den aktuellen Stream.
  • offset
    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
    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

Ausnahmetyp Bedingung

ArgumentNullException

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

ArgumentOutOfRangeException

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.

InvalidOperationException

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

ObjectDisposedException

Das Objekt war geschlossen oder freigegeben.

OracleException

Es ist ein Oracle-Fehler aufgetreten.

Hinweise

Wenn der Schreibvorgang erfolgreich ist, wird die Position im Stream um die Anzahl der geschriebenen Bytes erhöht. Beim Auftreten einer Ausnahme wird die Position im Stream nicht geändert.

Schreibvorgänge hinter dem Ende von LOB sind zulässig und erweitern das LOB um die Anzahl der geschriebenen Bytes.

Der .NET Framework-Datenanbieter für Oracle behandelt alle CLOB-Daten und NCLOB-Daten als Unicode. Daher arbeiten Sie beim Zugreifen auf CLOB-Datentypen und NCLOB-Datentypen immer mit der Anzahl von Bytes, wobei jedes Zeichen 2 Bytes beträgt. Wenn z. B. eine Textzeichenfolge mit drei Zeichen als ein NCLOB auf einem Oracle-Server gespeichert wird, dessen Zeichensatz 4 Bytes pro Zeichen beträgt, und Sie eine Write-Operation durchführen, geben Sie die Länge der Zeichenfolge als 6 Bytes an, obwohl diese auf dem Server als 12 Bytes gespeichert ist.

Wenn in das LOB geschrieben werden soll, müssen Sie das LOB mithilfe der FOR UPDATE-Klausel in der SQL-SELECT-Anweisung abgerufen haben, und eine lokale Transaktion muss gestartet worden sein.

Das folgende C#-Beispiel veranschaulicht das Schreiben in OracleLob-Objekte.

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).
      byte[] 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 ein schreibgeschütztes LOB kann fehlerfrei ausgeführt werden, das LOB auf dem Server wird jedoch nicht aktualisiert. In diesem Fall wird jedoch die lokale Kopie des LOB aktualisiert. Daher geben spätere Lesevorgänge für das OracleLob-Objekt möglicherweise die Ergebnisse des Schreibvorgangs zurück.

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1

Siehe auch

Referenz

OracleLob-Klasse
OracleLob-Member
System.Data.OracleClient-Namespace