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.Writes a sequence of bytes to the current OracleLob stream, and advances the current position within this stream by the number of bytes written.

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.An array of bytes. Este método copia el número de bytes especificado en count desde buffer hasta la secuencia actual.This method copies the number of bytes specified in count from buffer to the current stream.

offset
Int32

Desplazamiento en bytes de base cero en la buffer en la que se comienzan a copiar los bytes en la secuencia actual.The zero-based byte offset in buffer at which to begin copying bytes to the current stream. Para los tipos de datos CLOB y NCLOB, debe ser un número par.For CLOB and NCLOB data types, this must be an even number.

count
Int32

Número de bytes que se deben escribir en la secuencia actual.The number of bytes to be written to the current stream. Para los tipos de datos CLOB y NCLOB, debe ser un número par.For CLOB and NCLOB data types, this must be an even number.

Excepciones

El parámetro buffer es una referencia nula (Nothing en Visual Basic).The buffer parameter is a null reference (Nothing in Visual Basic).

Un valor del parámetro offset o count no es positivo.A value in the offset or count parameter is not positive.

O bien-or- La suma de los parámetros offset y count es mayor que la longitud de buffer.The sum of the offset and count parameters is larger than the buffer length.

o bien-or- Un valor especificado en el parámetro count u offset es menor que cero o mayor que 4 gigabytes.A value specified in the count or offset parameter is less than zero or greater than 4 gigabytes.

O bien-or- Debe especificar los tipos de datos CLOB y NCLOB como un número par de bytes.You must specify CLOB and NCLOB data types as an even number of bytes.

La operación no está dentro de una transacción, el objeto OracleLob es null, o la conexión está cerrada.The operation is not within a transaction, the OracleLob object is null, or the connection is closed.

El objeto estaba cerrado o desechado.The object was closed or disposed.

Se produjo un error de Oracle.An Oracle error has occurred.

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.If the write operation is successful, the position within the stream advances by the number of bytes written. Si se produce una excepción, la posición dentro de la secuencia permanece sin cambios.If an exception occurs, the position within the stream remains unchanged.

La escritura más allá del LOB final de se permite y amplía el LOB número de bytes escritos.Writing beyond the end of LOB is allowed and enlarges the LOB by the number of bytes written.

El proveedor de datos de .NET Framework para Oracle CLOB controla NCLOB todos los datos y como Unicode.The .NET Framework Data Provider for Oracle handles all CLOB and NCLOB data as Unicode. Por lo tanto, cuando CLOB se NCLOB obtiene acceso a los tipos de datos y, siempre se trabaja con el número de bytes, donde cada carácter tiene 2 bytes.Therefore, when accessing CLOB and NCLOB data types, you are always dealing with the number of bytes, where each character is 2 bytes. Por ejemplo, si una cadena de texto que contiene tres caracteres se guarda como NCLOB un en un servidor de Oracle en el que el juego de caracteres tiene 4 bytes por carácter Write y se realiza una operación, se especifica la longitud de la cadena como 6 bytes, aunque es almacenado como 12 bytes en el servidor.For example, if a string of text containing three characters is saved as an NCLOB on an Oracle server where the character set is 4 bytes per character, and you perform a Write operation, you specify the length of the string as 6 bytes, although it is stored as 12 bytes on the server.

Para escribir en LOB, debe haber LOB recuperado mediante la cláusula for Update en la instrucción SELECT de SQL y debe haber iniciado una transacción local.To write to the LOB, you must have retrieved the LOB using the FOR UPDATE clause in the SQL SELECT statement, and you must have a local transaction started.

En el C# ejemplo siguiente se muestra cómo escribir OracleLob en objetos.The following C# example demonstrates how to write to OracleLob objects.

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

Nota

Una operación de escritura en un solo LOB lectura puede realizarse correctamente, pero no LOB actualiza en el servidor.A write operation to a read-only LOB might succeed, but does not update the LOB on the server. Sin embargo, en este caso, LOB se actualiza la copia local de.In this case, however, the local copy of the LOB is updated. Por lo tanto, las operaciones de OracleLob lectura posteriores en el objeto podrían devolver los resultados de la operación de escritura.Therefore, later read operations on the OracleLob object might return the results of the write operation.

Se aplica a