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

Definición

Lee una secuencia de bytes en la secuencia OracleLob actual y hace avanzar la posición dentro de la secuencia en función del número de bytes leídos.Reads a sequence of bytes from the current OracleLob stream and advances the position within the stream by the number of bytes read.

public:
 override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer

Parámetros

buffer
Byte[]

Matriz de bytes.An array of bytes. Cuando este método devuelve un valor, el búfer contiene la matriz de bytes especificada con valores entre offset y (offset + count) reemplazada por los bytes leídos desde el origen actual.When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count) replaced by the bytes read from the current source.

offset
Int32

Posición de desplazamiento en bytes de base cero de buffer donde se comienza a almacenar los datos leídos de la secuencia actual.The zero-based byte offset in buffer at which to begin storing the data read from 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 máximo de bytes que se deben leer de la secuencia actual.The maximum number of bytes to be read from 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.

Devoluciones

Número total de bytes leídos en el búfer.The total number of bytes read into the buffer. Puede ser menor que el número de bytes solicitado si dicho número de bytes no está disponible en la actualidad, o cero (0) si se alcanza el final de la secuencia.This may be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached.

Excepciones

buffer es una referencia nula (Nothing en Visual Basic).The buffer 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 del búfer.The sum of the offset and count parameters is larger than the buffer length.

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

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

El Read método lee un máximo de count bytes de la buffer secuencia actual y los offsetalmacena a partir de.The Read method reads a maximum of count bytes from the current stream and stores them in buffer beginning at offset. La posición actual dentro de la secuencia se avanza por el número de bytes leídos; sin embargo, si se produce una excepción, la posición actual dentro de la secuencia permanece sin cambios.The current position within the stream is advanced by the number of bytes read; however, if an exception occurs, the current position within the stream remains unchanged. ReadDevuelve el número de bytes leídos.Read returns the number of bytes read. El valor devuelto es cero solo si la posición está actualmente al final de la secuencia.The return value is zero only if the position is currently at the end of the stream. Readse bloqueará hasta que se pueda leer al menos un byte de datos, en caso de que no haya datos disponibles.ReadRead will block until at least one byte of data can be read, in the event that no data is available.Read devuelve 0 si intenta leer desde un LOB cuando la posición actual está al final de. LOBreturns 0 if you attempt to read from a LOB when the current position is at the end of LOB. Readpuede devolver menos bytes de los solicitados, incluso si no se ha alcanzado el final de la secuencia.Read can return fewer bytes than requested even if the end of the stream has not been reached.

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 Read 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 Read operation, you specify the length of the string as 6 bytes, although it is stored as 12 bytes on the server.

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

public static void ReadLobExample(OracleCommand command)  
{  
   int actual = 0;  
  
   //Select some data.  
   // Table Schema:  
   //  "CREATE TABLE TableWithLobs (a int, b BLOB, c CLOB, d NCLOB)";  
   //  "INSERT INTO TableWithLobs values (1, 'AA', 'AAA', N'AAAA')";  
   command.CommandText = "SELECT * FROM TableWithLobs";  
   OracleDataReader reader = command.ExecuteReader();  
   using(reader)  
   {  
      //Obtain the first row of data.  
      reader.Read();  
      //Obtain the LOBs (all 3 varieties).  
      OracleLob BLOB = reader.GetOracleLob(1);  
      OracleLob CLOB  = reader.GetOracleLob(2);  
      OracleLob NCLOB = reader.GetOracleLob(3);  
  
      //Example - Reading binary data (in chunks).  
      byte[] buffer = new byte[100];  
      while((actual = BLOB.Read(buffer, 0, buffer.Length)) >0)  
         Console.WriteLine(BLOB.LobType + ".Read(" + buffer + ", " + buffer.Length + ") => " + actual);  
  
      //Example - Reading CLOB/NCLOB data (in chunks).  
      //Note: You can read character data as raw Unicode bytes (using OracleLob.Read as in the above example).  
      //However, because the OracleLob object inherits directly from the.NET stream object,   
      //all the existing classes that manipulate streams can also be used. For example, the   
      //.NET StreamReader makes converting the raw bytes into actual characters easier.  
      StreamReader streamreader = new StreamReader(CLOB, Encoding.Unicode);  
      char[] cbuffer = new char[100];  
      while((actual = streamreader.Read(cbuffer, 0, cbuffer.Length)) >0)  
         Console.WriteLine(CLOB.LobType + ".Read(" + new string(cbuffer, 0, actual) + ", " + cbuffer.Length + ") => " + actual);  
  
      //Example - Reading data (all at once).  
      //You could use StreamReader.ReadToEnd to obtain all the string data,or simply  
      //call OracleLob.Value to obtain a contiguous allocation of all the data.  
      Console.WriteLine(NCLOB.LobType + ".Value => " + NCLOB.Value);  
   }  
}  

Puede crear un OracleLob que sea NULL con este formato:You can construct an OracleLob that is NULL using this format:

OracleLob myLob = OracleLob.Null;  

Esta técnica se utiliza principalmente para probar si un LOB devuelto desde el servidor es null, como se muestra en el ejemplo siguiente.This technique is used primarily to test whether a LOB returned from the server is NULL, as the following example illustrates.

If(myLob == OracleLob.Null)  

Un valor LOB NULL se comporta de forma similar a un LOB byte cero Read en que se ejecuta correctamente y siempre devuelve cero bytes.A NULL LOB behaves similarly to a zero byte LOB in that Read succeeds and always returns zero bytes.

Se aplica a