Aracılığıyla paylaş


OracleLob.Write(Byte[], Int32, Int32) Yöntem

Tanım

Geçerli OracleLob akışa bir bayt dizisi yazar ve bu akıştaki geçerli konumu yazılan bayt sayısına göre ilerletir.

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)

Parametreler

buffer
Byte[]

Bayt dizisi. Bu yöntem, içinde countbuffer belirtilen bayt sayısını geçerli akışa kopyalar.

offset
Int32

Geçerli akışa bayt kopyalamaya başlanacak sıfır tabanlı bayt uzaklığı buffer . ve NCLOB veri türleri için CLOB bu çift sayı olmalıdır.

count
Int32

Geçerli akışa yazılacak bayt sayısı. ve NCLOB veri türleri için CLOB bu çift sayı olmalıdır.

Özel durumlar

buffer Parametresi null başvurudur (Nothing Visual Basic'te).

veya count parametresindeki offset bir değer pozitif değil.

-veya-

ve count parametrelerinin offset toplamı uzunluk değerinden buffer daha büyük.

-veya-

veya offset parametresinde count belirtilen değer sıfırdan küçük veya 4 gigabayttan büyük.

-veya-

ve NCLOB veri türlerini çift bayt sayısı olarak belirtmeniz CLOB gerekir.

İşlem bir işlem içinde değil, OracleLob nesne null veya bağlantı kapatıldı.

Nesne kapatıldı veya atıldı.

Oracle hatası oluştu.

Açıklamalar

Yazma işlemi başarılı olursa, akış içindeki konum yazılan bayt sayısına göre ilerler. Bir özel durum oluşursa, akış içindeki konum değişmeden kalır.

sonuna LOB kadar yazmaya izin verilir ve değerini yazılan bayt sayısına göre büyütür LOB .

Oracle için .NET Framework Veri Sağlayıcısı tüm CLOB ve NCLOB verileri Unicode olarak işler. Bu nedenle, ve NCLOB veri türlerine erişirken CLOB her zaman her karakterin 2 bayt olduğu bayt sayısıyla ilgilenirsiniz. Örneğin, üç karakter içeren bir metin dizesi, karakter kümesinin karakter başına 4 bayt olduğu bir Oracle sunucusuna kaydedilirse NCLOB ve bir Write işlem gerçekleştirirseniz, dizenin uzunluğunu sunucuda 12 bayt olarak depolanmasına rağmen 6 bayt olarak belirtirsiniz.

öğesine yazmak için LOB, SQL SELECT deyiminde FOR UPDATE yan tümcesini kullanarak öğesini almış LOB olmanız ve yerel bir işlemi başlatmış olmanız gerekir.

Aşağıdaki örnekte nesnelere yazma OracleLob işlemi gösterilmektedir:

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

Not

Salt LOB okunur bir yazma işlemi başarılı olabilir, ancak sunucusundaki öğesini LOB güncelleştirmez. Ancak bu durumda, öğesinin LOB yerel kopyası güncelleştirilir. Bu nedenle, nesnedeki OracleLob daha sonra okuma işlemleri yazma işleminin sonuçlarını döndürebilir.

Şunlara uygulanır