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.
Legge una sequenza di byte dal flusso corrente OracleLob e sposta in avanti la posizione 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 termina, il buffer contiene la matrice di byte specificata con i valori tra offset e (offset + count) sostituiti dai byte letti dall'origine corrente.
- offset
- Int32
Offset dei byte in base zero in in buffer corrispondenza del quale iniziare a archiviare i dati letti dal flusso corrente. Per CLOB i tipi di dati e NCLOB , questo deve essere un numero pari.
- count
- Int32
Numero massimo di byte da leggere dal flusso corrente. Per CLOB i tipi di dati e NCLOB , questo deve essere un numero pari.
Valori restituiti
Numero totale di byte letti nel buffer. Può essere minore del numero di byte richiesti se molti byte non sono attualmente disponibili oppure zero (0) se è stata raggiunta la fine del flusso.
Eccezioni
Il buffer è un riferimento Null (Nothing in Visual Basic).
Un valore nel offset parametro o count non è positivo.
oppure
La somma dei parametri offset e count è maggiore della lunghezza del buffer.
oppure
Un valore specificato nel offset parametro è minore di zero o maggiore di 4 gigabyte.
L'operazione non si trova all'interno di una transazione, l'oggetto OracleLob è Null o la connessione viene 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 si 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 oggetto quando la posizione corrente si trova alla fine di LOB.
Read può restituire meno byte di quanto richiesto anche se la fine del flusso non è stata raggiunta.
Il provider di dati di .NET Framework per Oracle gestisce tutti i dati CLOB e NCLOB come Unicode. Pertanto, quando si accede ai CLOB tipi di dati e NCLOB , si ha sempre a che fare con il numero di byte, in cui ogni carattere è di 2 byte. Ad esempio, se una stringa di testo contenente tre caratteri viene salvata come in NCLOB un 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, sebbene sia 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 valore OracleLob NULL usando questo formato:
OracleLob myLob = OracleLob.Null;
Questa tecnica viene usata principalmente per verificare se un LOB oggetto 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 ha esito positivo e restituisce sempre zero byte.