Bagikan melalui


OracleLob.Read(Byte[], Int32, Int32) Metode

Definisi

Membaca urutan byte dari aliran saat ini OracleLob dan memajukan posisi dalam aliran dengan jumlah byte yang dibaca.

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

Parameter

buffer
Byte[]

Array byte. Ketika metode ini kembali, buffer berisi array byte yang ditentukan dengan nilai antara offset dan (offset + count) digantikan oleh byte yang dibaca dari sumber saat ini.

offset
Int32

Offset byte berbasis nol untuk buffer mulai menyimpan data yang dibaca dari aliran saat ini. Untuk CLOB jenis data dan NCLOB , ini harus berupa angka genap.

count
Int32

Jumlah maksimum byte yang akan dibaca dari aliran saat ini. Untuk CLOB jenis data dan NCLOB , ini harus berupa angka genap.

Mengembalikan

Jumlah total byte yang dibaca ke dalam buffer. Ini mungkin kurang dari jumlah byte yang diminta jika banyak byte saat ini tidak tersedia, atau nol (0) jika akhir aliran telah tercapai.

Pengecualian

buffer adalah referensi null (Nothing di Visual Basic).

Nilai dalam offset parameter atau count tidak positif.

-atau-

Jumlah parameter offset dan hitungan lebih besar dari panjang buffer.

-atau-

Nilai yang ditentukan dalam amount parameter atau offset kurang dari nol atau lebih besar dari 4 gigabyte.

Operasi tidak berada dalam transaksi, OracleLob objek null, atau koneksi ditutup.

Objek ditutup atau dibuang.

Terjadi kesalahan Oracle.

Keterangan

Metode Read membaca maksimum count byte dari aliran saat ini dan menyimpannya di buffer awal di offset. Posisi saat ini dalam aliran dimajukan dengan jumlah byte yang dibaca; namun, jika pengecualian terjadi, posisi saat ini dalam aliran tetap tidak berubah. Read mengembalikan jumlah byte yang dibaca. Nilai yang dikembalikan adalah nol hanya jika posisi saat ini berada di akhir aliran. Read akan memblokir hingga setidaknya satu byte data dapat dibaca, jika tidak ada data yang tersedia.Read mengembalikan 0 jika Anda mencoba membaca dari LOB saat posisi saat ini berada di akhir LOB. Read dapat mengembalikan lebih sedikit byte daripada yang diminta meskipun akhir aliran belum tercapai.

Penyedia Data .NET Framework untuk Oracle menangani semua CLOB data dan NCLOB sebagai Unicode. Oleh karena itu, saat mengakses CLOB dan NCLOB jenis data, Anda selalu berurusan dengan jumlah byte, di mana setiap karakter adalah 2 byte. Misalnya, jika string teks yang berisi tiga karakter disimpan sebagai NCLOB di server Oracle di mana kumpulan karakter adalah 4 byte per karakter, dan Anda melakukan Read operasi, Anda menentukan panjang string sebagai 6 byte, meskipun disimpan sebagai 12 byte di server.

Contoh berikut menunjukkan cara membaca OracleLob objek.

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

Anda dapat membuat null OracleLob menggunakan format ini:

OracleLob myLob = OracleLob.Null;  

Teknik ini digunakan terutama untuk menguji apakah yang LOB dikembalikan dari server adalah NULL, seperti yang diilustrasikan contoh berikut.

if (myLob == OracleLob.Null)  

NULL LOB berperilaku mirip dengan byte LOB nol yang Read berhasil dan selalu mengembalikan nol byte.

Berlaku untuk