OracleLob.Write(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.
Menulis urutan byte ke aliran saat ini OracleLob , dan memajukan posisi saat ini dalam aliran ini dengan jumlah byte yang ditulis.
public:
override void Write(cli::array <System::Byte> ^ buffer, int offset, int count);
public override void Write (byte[] buffer, int offset, int count);
override this.Write : byte[] * int * int -> unit
Public Overrides Sub Write (buffer As Byte(), offset As Integer, count As Integer)
Parameter
- buffer
- Byte[]
Array byte. Metode ini menyalin jumlah byte yang ditentukan dari count
buffer
ke aliran saat ini.
- offset
- Int32
Offset byte berbasis nol untuk buffer
mulai menyalin byte ke aliran saat ini. Untuk CLOB
jenis data dan NCLOB
, ini harus berupa angka genap.
- count
- Int32
Jumlah byte yang akan ditulis ke aliran saat ini. Untuk CLOB
jenis data dan NCLOB
, ini harus berupa angka genap.
Pengecualian
Parameter buffer
adalah referensi null (Nothing
di Visual Basic).
Nilai dalam offset
parameter atau count
tidak positif.
-atau-
Jumlah offset
parameter dan count
lebih besar dari panjangnya buffer
.
-atau-
Nilai yang ditentukan dalam count
parameter atau offset
kurang dari nol atau lebih besar dari 4 gigabyte.
-atau-
Anda harus menentukan CLOB
dan NCLOB
jenis data sebagai jumlah byte genap.
Operasi tidak berada dalam transaksi, OracleLob objek null, atau koneksi ditutup.
Objek ditutup atau dibuang.
Terjadi kesalahan Oracle.
Keterangan
Jika operasi tulis berhasil, posisi dalam aliran akan maju dengan jumlah byte yang ditulis. Jika terjadi pengecualian, posisi dalam aliran tetap tidak berubah.
Menulis di luar akhir LOB
diizinkan dan memperbesar LOB
dengan jumlah byte yang ditulis.
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 Write
operasi, Anda menentukan panjang string sebagai 6 byte, meskipun disimpan sebagai 12 byte di server.
Untuk menulis ke LOB
, Anda harus telah mengambil LOB
menggunakan klausa FOR UPDATE dalam pernyataan SQL SELECT, dan Anda harus memulai transaksi lokal.
Contoh berikut menunjukkan cara menulis ke OracleLob objek:
public static void WriteLobExample(OracleCommand command)
{
// Note: Updating LOB data requires a transaction.
command.Transaction = command.Connection.BeginTransaction();
// Select some data.
// Table Schema:
// "CREATE TABLE tablewithlobs (a int, b BLOB, c BLOB)";
// "INSERT INTO tablewithlobs values (1, 'AA', 'AAA')";
command.CommandText = "SELECT * FROM TableWithLobs FOR UPDATE";
OracleDataReader reader = command.ExecuteReader();
using(reader)
{
// Obtain the first row of data.
reader.Read();
// Obtain both LOBs.
OracleLob BLOB1 = reader.GetOracleLob(1);
OracleLob BLOB2 = reader.GetOracleLob(2);
// Perform any desired operations on the LOB, (read, position, and so on).
// ...
// Example - Writing binary data (directly to the backend).
// To write, you can use any of the stream classes, or write raw binary data using
// the OracleLob write method. Writing character vs. binary is the same;
// however note that character is always in terms of Unicode byte counts
// (for example: even number of bytes - 2 bytes for every Unicode character).
var buffer = new byte[100];
buffer[0] = 0xCC;
buffer[1] = 0xDD;
BLOB1.Write(buffer, 0, 2);
BLOB1.Position = 0;
Console.WriteLine(BLOB1.LobType + ".Write(" + buffer + ", 0, 2) => " + BLOB1.Value);
// Example - Copying data into another LOB.
long actual = BLOB1.CopyTo(BLOB2);
Console.WriteLine(BLOB1.LobType + ".CopyTo(" + BLOB2.Value + ") => " + actual);
// Commit the transaction now that everything succeeded.
// Note: On error, Transaction.Dispose is called (from the using statement)
// and will automatically roll-back the pending transaction.
command.Transaction.Commit();
}
}
Catatan
Operasi tulis ke baca-saja LOB
mungkin berhasil, tetapi tidak memperbarui LOB
pada server. Namun, dalam hal ini, salinan lokal diperbarui LOB
. Oleh karena itu, operasi baca nanti pada OracleLob objek mungkin mengembalikan hasil operasi tulis.