OracleLob.Write(Byte[], Int32, Int32) Método

Definición

Escribe una secuencia de bytes en la secuencia OracleLob actual y hace avanzar la posición actual dentro de la secuencia en el número de bytes especificado.

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)

Parámetros

buffer
Byte[]

Matriz de bytes. Este método copia el número de bytes especificado en count desde buffer hasta la secuencia actual.

offset
Int32

Desplazamiento en bytes de base cero en buffer desde donde se comienzan a copiar los bytes en la secuencia actual. Para los tipos de datos CLOB y NCLOB, debe ser un número par.

count
Int32

Número de bytes que se deben escribir en la secuencia actual. Para los tipos de datos CLOB y NCLOB, debe ser un número par.

Excepciones

El parámetro buffer es una referencia nula (Nothing en Visual Basic).

Un valor del parámetro offset o count no es positivo.

o bien

La suma de los parámetros offset y count es mayor que la longitud de buffer.

o bien

Un valor especificado en el parámetro count u offset es menor que cero o mayor que 4 gigabytes.

o bien

Debe especificar los tipos de datos CLOB y NCLOB como un número par de bytes.

La operación no está dentro de una transacción, el objeto OracleLob es null, o la conexión está cerrada.

El objeto estaba cerrado o desechado.

Se produjo un error de Oracle.

Comentarios

Si la operación de escritura se realiza correctamente, la posición dentro de la secuencia avanza por el número de bytes escritos. Si se produce una excepción, la posición dentro de la secuencia permanece sin cambios.

Se permite escribir más allá del final de LOB y amplía LOB el por el número de bytes escritos.

El proveedor de datos de .NET Framework para Oracle controla todos los CLOB datos y NCLOB como Unicode. Por lo tanto, al acceder a CLOB los tipos de datos y NCLOB , siempre se trata del número de bytes, donde cada carácter es de 2 bytes. Por ejemplo, si se guarda una cadena de texto que contiene tres caracteres como en un NCLOB servidor oracle donde el juego de caracteres es de 4 bytes por carácter y se realiza una Write operación, se especifica la longitud de la cadena como 6 bytes, aunque se almacena como 12 bytes en el servidor.

Para escribir en LOB, debe haber recuperado mediante LOB la cláusula FOR UPDATE en la instrucción SQL SELECT y debe haber iniciado una transacción local.

En el ejemplo siguiente se muestra cómo escribir OracleLob en objetos:

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

Nota

Una operación de escritura en un solo LOB lectura podría realizarse correctamente, pero no actualiza en LOB el servidor. Sin embargo, en este caso, se actualiza la copia local de .LOB Por lo tanto, las operaciones de lectura posteriores en el OracleLob objeto podrían devolver los resultados de la operación de escritura.

Se aplica a