OracleLob.Read(Byte[], Int32, Int32) Méthode

Définition

Lit une séquence d’octets à partir du flux actuel OracleLob et avance la position dans le flux en fonction du nombre d’octets lus.

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

Paramètres

buffer
Byte[]

Tableau d’octets. Lorsque cette méthode est retournée, la mémoire tampon contient le tableau d’octets spécifié avec les valeurs comprises entre offset et (offset + count) remplacées par les octets lus à partir de la source actuelle.

offset
Int32

Décalage d’octet de base zéro dans buffer lequel commencer le stockage des données lues à partir du flux actuel. Pour les types de données et CLOB pour NCLOB les types de données, il doit s’agir d’un nombre pair.

count
Int32

Nombre maximal d’octets à lire à partir du flux actuel. Pour les types de données et CLOB pour NCLOB les types de données, il doit s’agir d’un nombre pair.

Retours

Nombre total d’octets lus dans la mémoire tampon. Cela peut être inférieur au nombre d’octets demandé si de nombreux octets ne sont pas actuellement disponibles, ou zéro (0) si la fin du flux a été atteinte.

Exceptions

La buffer est une référence Null (Nothing dans Visual Basic).

Une valeur dans le ou offset le paramètre n’est count pas positive.

- ou -

La somme des paramètres de décalage et de nombre est supérieure à la longueur de la mémoire tampon.

- ou -

Une valeur spécifiée dans le offset paramètre est inférieure à zéro ou supérieure à 4 gigaoctets.

L’opération n’est pas dans une transaction, l’objet a la OracleLob valeur Null ou la connexion est fermée.

L’objet a été fermé ou supprimé.

Une erreur Oracle s’est produite.

Remarques

La Read méthode lit un maximum d’octets count à partir du flux actuel et les stocke en buffer commençant par offset. La position actuelle dans le flux est avancée par le nombre d’octets lus ; Toutefois, si une exception se produit, la position actuelle dans le flux reste inchangée. Read renvoie le nombre d’octets lus. La valeur de retour est égale à zéro uniquement si la position est actuellement à la fin du flux. Read bloque jusqu’à ce qu’au moins un octet de données puisse être lu, si aucune donnée n’est disponible.Read retourne 0 si vous tentez de lire à partir d’une LOB date à laquelle la position actuelle est à la fin de LOB. Read peut retourner moins d’octets que demandés même si la fin du flux n’a pas été atteinte.

Le Fournisseur de données .NET Framework pour Oracle gère toutes les données CLOB et NCLOB en tant qu’Unicode. Par conséquent, lors de l’accès et CLOBNCLOB des types de données, vous traitez toujours du nombre d’octets, où chaque caractère est de 2 octets. Par exemple, si une chaîne de texte contenant trois caractères est enregistrée sous la forme d’un NCLOB serveur Oracle où le jeu de caractères est de 4 octets par caractère et que vous effectuez une Read opération, vous spécifiez la longueur de la chaîne sous la forme de 6 octets, bien qu’elle soit stockée sous la forme de 12 octets sur le serveur.

L’exemple suivant montre comment lire OracleLob des objets.

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

Vous pouvez construire une OracleLob valeur NULL au format suivant :

OracleLob myLob = OracleLob.Null;

Cette technique est principalement utilisée pour tester si un LOB retour du serveur a la valeur NULL, comme l’illustre l’exemple suivant.

if (myLob == OracleLob.Null)

Une valeur NULL LOB se comporte de la même façon qu’un octet LOB zéro dans ce qui Read réussit et retourne toujours zéro octets.

S’applique à