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

Tanım

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 bufferoffset. 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 LOBbir 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.

Şunlara uygulanır