OracleLob.Write(Byte[], Int32, Int32) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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 CLOB veri türleri için NCLOB bu çift sayı olmalıdır.
- count
- Int32
Geçerli akışa yazılacak bayt sayısı. ve CLOB veri türleri için NCLOB bu çift sayı olmalıdır.
Özel durumlar
buffer parametresi null başvurudur (Nothing Visual Basic).
veya offset parametresindeki count bir değer pozitif değil.
-veya-
ve offset parametrelerinin count toplamı uzunluk değerinden buffer büyüktür.
-veya-
veya count parametresinde offset belirtilen değer sıfırdan küçük veya 4 gigabayttan büyük.
-veya-
ve CLOB veri türlerini çift bayt sayısı olarak belirtmeniz NCLOB 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ıştaki 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 verilerini Unicode olarak işler. Bu nedenle, ve CLOB veri türlerine erişirkenNCLOB, her karakterin 2 bayt olduğu bayt sayısıyla her zaman 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 depolansa da 6 bayt olarak belirtirsiniz.
öğesine yazmak için LOB, SQL SELECT deyimindeki FOR UPDATE yan tümcesini kullanarak öğesini almış LOB 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();
}
}
Note
Salt LOB okunur bir yazma işlemi başarılı olabilir, ancak sunucusundaki öğesini LOB güncelleştirmez. Ancak bu durumda, yerel kopyası LOB güncelleştirilir. Bu nedenle, nesnedeki OracleLob daha sonra okuma işlemleri yazma işleminin sonuçlarını döndürebilir.