OracleLob.Read(Byte[], Int32, Int32) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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.