OracleLob.Read(Byte[], Int32, Int32) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Consente di leggere una sequenza di byte dal flusso OracleLob corrente e di passare alla posizione successiva all'interno del flusso in base al numero di byte letti.
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
Parametri
- buffer
- Byte[]
Matrice di byte. Quando questo metodo viene restituito, il buffer contiene la matrice di byte specificata con i valori compresi tra offset
e (offset
+ count
) sostituiti con i byte letti dall'origine corrente.
- offset
- Int32
Offset dei byte in base zero in buffer
in corrispondenza del quale iniziare l'archiviazione dei dati letti dal flusso corrente. Per i tipi di dati CLOB
e NCLOB
, deve trattarsi di un numero pari.
- count
- Int32
Numero massimo di byte da leggere dal flusso corrente. Per i tipi di dati CLOB
e NCLOB
, deve trattarsi di un numero pari.
Restituisce
Numero complessivo di byte letti nel buffer. È possibile che questo numero sia inferiore a quello dei byte richiesti se la quantità di byte disponibili è minore oppure che corrisponda a zero se è stata raggiunta la fine del flusso.
Eccezioni
Il parametro buffer
è un riferimento null (Nothing
in Visual Basic).
Un valore nel parametro offset
o count
non è positivo.
-oppure-
La somma dei parametri di offset e conteggio è maggiore della lunghezza del buffer.
-oppure-
Un valore specificato nel parametro amount
o offset
è minore di zero o maggiore di 4 GB.
L'operazione non è presente all'interno di una transazione, l'oggetto OracleLob è null oppure la connessione è chiusa.
L'oggetto è stato chiuso o eliminato.
Si è verificato un errore Oracle.
Commenti
Il Read metodo legge un massimo di count
byte dal flusso corrente e li archivia a buffer
partire da offset
. La posizione corrente all'interno del flusso è avanzata dal numero di byte letti; Tuttavia, se si verifica un'eccezione, la posizione corrente all'interno del flusso rimane invariata.
Read restituisce il numero di byte letti. Il valore restituito è zero solo se la posizione è attualmente alla fine del flusso.
Read blocca fino a quando non è possibile leggere almeno un byte di dati, nel caso in cui non siano disponibili dati.Read restituisce 0 se si tenta di leggere da un LOB
quando la posizione corrente è alla fine di LOB
.
Read può restituire meno byte rispetto alla richiesta anche se la fine del flusso non è stata raggiunta.
Il provider di dati .NET Framework per Oracle gestisce tutti i CLOB
dati e NCLOB
come Unicode. Pertanto, quando si accede CLOB
ai tipi di dati e NCLOB
si tratta sempre del numero di byte, in cui ogni carattere è 2 byte. Ad esempio, se una stringa di testo contenente tre caratteri viene salvata come un NCLOB
server Oracle in cui il set di caratteri è di 4 byte per carattere e si esegue un'operazione Read
, si specifica la lunghezza della stringa come 6 byte, anche se viene archiviata come 12 byte nel server.
Nell'esempio seguente viene illustrato come leggere OracleLob gli oggetti.
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).
var 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.
var streamreader = new StreamReader(CLOB, Encoding.Unicode);
var 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);
}
}
È possibile costruire un oggetto OracleLob NULL usando questo formato:
OracleLob myLob = OracleLob.Null;
Questa tecnica viene usata principalmente per verificare se un LOB
restituito dal server è NULL, come illustrato nell'esempio seguente.
if (myLob == OracleLob.Null)
Un valore NULL LOB
si comporta in modo analogo a un byte LOB
zero in che Read riesce e restituisce sempre zero byte.