OracleLob.Read(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ıştan bir bayt dizisi okur ve okunan bayt sayısına göre akış içindeki konumu ilerletir.
public:
override int Read(cli::array <System::Byte> ^ buffer, int offset, int count);
public override int Read (byte[] buffer, int offset, int count);
override this.Read : byte[] * int * int -> int
Public Overrides Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer
Parametreler
- buffer
- Byte[]
Bayt dizisi. Bu yöntem döndürdüğünde arabellek, ve (offset
+ count
) arasındaki offset
değerlerin geçerli kaynaktan okunan baytlarla değiştirdiği belirtilen bayt dizisini içerir.
- offset
- Int32
Geçerli akıştan okunan verileri depolamaya başlayabileceğiniz 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ıştan okunacak en fazla bayt sayısı. ve NCLOB
veri türleri için CLOB
bu çift sayı olmalıdır.
Döndürülenler
Arabelleğe okunan toplam bayt sayısı. Bu, şu anda kullanılabilir sayıda bayt yoksa istenen bayt sayısından az veya akışın sonuna ulaşıldıysa sıfır (0) olabilir.
Özel durumlar
buffer
null başvurudur (Nothing
Visual Basic'te).
veya count
parametresindeki offset
bir değer pozitif değil.
-veya-
Uzaklık ve sayı parametrelerinin toplamı arabellek uzunluğundan daha büyüktür.
-veya-
veya offset
parametresinde amount
belirtilen değer sıfırdan küçük veya 4 gigabayttan büyük.
İş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
Read yöntemi geçerli akıştan en fazla count
bayt sayısını okur ve başında depolar buffer
offset
. Akış içindeki geçerli konum, okunan bayt sayısıyla gelişmiştir; ancak bir özel durum oluşursa akış içindeki geçerli konum değişmeden kalır.
Read okunan bayt sayısını döndürür. Dönüş değeri yalnızca konum şu anda akışın sonundaysa sıfırdır.
Read, kullanılabilir veri olmaması durumunda en az bir bayt veri okunana kadar engeller.Read , geçerli konumu sonundayken LOB
bir LOB
konumundan okumayı denerseniz 0 döndürür.
Read akışın sonuna ulaşılmasa bile istenenden daha az bayt döndürebilir.
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 Read
işlem gerçekleştirirseniz, dizenin uzunluğunu sunucuda 12 bayt olarak depolanmasına rağmen 6 bayt olarak belirtirsiniz.
Aşağıdaki örnekte nesnelerin nasıl okunduğu OracleLob gösterilmektedir.
public static void ReadLobExample(OracleCommand command)
{
int actual = 0;
// Select some data.
// Table Schema:
// "CREATE TABLE TableWithLobs (a int, b BLOB, c CLOB, d NCLOB)";
// "INSERT INTO TableWithLobs values (1, 'AA', 'AAA', N'AAAA')";
command.CommandText = "SELECT * FROM TableWithLobs";
OracleDataReader reader = command.ExecuteReader();
using(reader)
{
// Obtain the first row of data.
reader.Read();
// Obtain the LOBs (all 3 varieties).
OracleLob BLOB = reader.GetOracleLob(1);
OracleLob CLOB = reader.GetOracleLob(2);
OracleLob NCLOB = reader.GetOracleLob(3);
// Example - Reading binary data (in chunks).
var buffer = new byte[100];
while((actual = BLOB.Read(buffer, 0, buffer.Length)) > 0)
Console.WriteLine(BLOB.LobType + ".Read(" + buffer + ", " + buffer.Length + ") => " + actual);
// Example - Reading CLOB/NCLOB data (in chunks).
// Note: You can read character data as raw Unicode bytes (using OracleLob.Read as in the above example).
// However, because the OracleLob object inherits directly from the.NET stream object,
// all the existing classes that manipulate streams can also be used. For example, the
// .NET StreamReader makes converting the raw bytes into actual characters easier.
var streamreader = new StreamReader(CLOB, Encoding.Unicode);
var cbuffer = new char[100];
while((actual = streamreader.Read(cbuffer, 0, cbuffer.Length)) >0)
Console.WriteLine(CLOB.LobType + ".Read(" + new string(cbuffer, 0, actual) + ", " + cbuffer.Length + ") => " + actual);
//Example - Reading data (all at once).
//You could use StreamReader.ReadToEnd to obtain all the string data,or simply
//call OracleLob.Value to obtain a contiguous allocation of all the data.
Console.WriteLine(NCLOB.LobType + ".Value => " + NCLOB.Value);
}
}
Bu biçimi kullanarak NULL olan bir OracleLob oluşturabilirsiniz:
OracleLob myLob = OracleLob.Null;
Bu teknik öncelikle aşağıdaki örnekte gösterildiği gibi sunucudan döndürülen bir LOB
değerin NULL olup olmadığını test etmek için kullanılır.
if (myLob == OracleLob.Null)
NULLLOB
, başarılı olan ve her zaman sıfır bayt döndüren Read sıfır bayt LOB
gibi davranır.