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 count
buffer
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.