OracleLob.Read(Byte[], Int32, Int32) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Lit une séquence d'octets à partir du flux OracleLob actuel et avance la position dans le flux 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é dont les valeurs comprises entre offset
et (offset
+ count
) sont remplacées par les octets lus dans la source en cours.
- offset
- Int32
Dans buffer
, décalage d'octet de base zéro auquel commencer le stockage des données lues dans le flux actuel. Pour les types de données CLOB
et NCLOB
, il doit s'agir d'un nombre pair.
- count
- Int32
Nombre maximal d'octets à lire dans le flux actuel. Pour les types de données CLOB
et NCLOB
, il doit s'agir d'un nombre pair.
Retours
Nombre total d'octets lus dans la mémoire tampon. Ceci peut être inférieur au nombre d'octets demandé si ce nombre n'est pas actuellement disponible ou égal à zéro (0) si la fin du flux a été atteinte.
Exceptions
buffer
est une référence Null (Nothing
en Visual Basic).
Une valeur du paramètre offset
ou count
n'est pas positive.
- ou -
La somme des paramètres offset et count est supérieure à la longueur de la mémoire tampon.
- ou -
Une valeur spécifiée dans le paramètre amount
ou offset
est inférieure à zéro ou supérieure à 4 giga-octets.
L'opération ne fait pas partie d'une transaction, l'objet OracleLob est de type null ou la connexion est fermée.
L'objet était fermé ou supprimé.
Une erreur Oracle s'est produite.
Remarques
La Read méthode lit un maximum d’octets count
du flux actuel et les stocke dans à buffer
partir offset
de . 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 retourne le nombre d’octets lus. La valeur de retour est égale à zéro uniquement si la position se trouve actuellement à la fin du flux.
Read se bloque jusqu’à ce qu’au moins un octet de données puisse être lu, dans le cas où aucune donnée n’est disponible.Read retourne 0 si vous tentez de lire à partir d’un LOB
lorsque la position actuelle se trouve à la fin de LOB
.
Read peut retourner moins d’octets que demandé 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 CLOB
données et NCLOB
au format Unicode. Par conséquent, lors de l’accès aux CLOB
types de données et NCLOB
, vous avez toujours affaire au 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 en tant que NCLOB
sur un 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 un qui a la OracleLob valeur NULL en utilisant ce format :
OracleLob myLob = OracleLob.Null;
Cette technique est principalement utilisée pour tester si un LOB
retourné à partir 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 zéro LOB
dans qui Read réussit et retourne toujours zéro octet.