Bagikan melalui


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

Definisi

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 countbuffer 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.

Berlaku untuk