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

Définition

Écrit une séquence d’octets dans le flux actuel OracleLob et avance la position actuelle dans ce flux par le nombre d’octets écrits.

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)

Paramètres

buffer
Byte[]

Tableau d’octets. Cette méthode copie le nombre d’octets spécifiés dans count le buffer flux actuel.

offset
Int32

Décalage d’octet de base zéro dans buffer lequel commencer la copie d’octets dans le 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 d’octets à écrire dans le 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.

Exceptions

Le paramètre 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 et offset des count paramètres est supérieure à la buffer longueur.

- ou -

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

- ou -

Vous devez spécifier et CLOB les NCLOB types de données comme un nombre pair d’octets.

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

Si l’opération d’écriture réussit, la position dans le flux avance par le nombre d’octets écrits. Si une exception se produit, la position dans le flux reste inchangée.

L’écriture au-delà de la fin est LOB autorisée et agrandit le LOB nombre d’octets écrits.

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 Write 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.

Pour écrire dans le LOBfichier , vous devez avoir récupéré la LOB clause FOR UPDATE dans l’instruction SQL SELECT, et vous devez avoir démarré une transaction locale.

L’exemple suivant montre comment écrire dans des OracleLob objets :

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

Une opération d’écriture sur une lecture seule LOB peut réussir, mais ne met pas à jour le LOB serveur. Dans ce cas, toutefois, la copie locale du fichier LOB est mise à jour. Par conséquent, les opérations de lecture ultérieures sur l’objet OracleLob peuvent renvoyer les résultats de l’opération d’écriture.

S’applique à