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

Definición

Escribe una secuencia de bytes en la secuencia actual OracleLob y avanza la posición actual dentro de esta secuencia por el número de bytes escritos.

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 especificados en count de buffer a la secuencia actual.

offset
Int32

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

count
Int32

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

Excepciones

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

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

O bien

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

O bien

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

O bien

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

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

El objeto se cerró o se ha eliminado.

Se ha producido 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 por LOB el número de bytes escritos.

El Proveedor de datos de .NET Framework para Oracle controla todos los datos /CLOB y NCLOB como Unicode. Por lo tanto, al acceder a CLOB los tipos de datos y NCLOB , siempre se trabaja con el número de bytes, donde cada carácter es de 2 bytes. Por ejemplo, si una cadena de texto que contiene tres caracteres se guarda como en NCLOB un servidor oracle donde el juego de caracteres es de 4 bytes por carácter y 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 el uso de la LOB 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();
    }
}

Note

Una operación de escritura en un solo LOB lectura puede 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