OracleLob.Read(Byte[], Int32, Int32) Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Läser en sekvens med byte från den aktuella OracleLob dataströmmen och flyttar positionen inom dataströmmen med antalet lästa byte.
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
Parametrar
- buffer
- Byte[]
En matris med byte. När den här metoden returnerar innehåller bufferten den angivna bytematrisen med värdena mellan offset och (offset + count) ersatta av byteen som lästs från den aktuella källan.
- offset
- Int32
Den nollbaserade byteförskjutningen buffer där du kan börja lagra data som lästs från den aktuella strömmen. För CLOB och NCLOB datatyper måste detta vara ett jämnt tal.
- count
- Int32
Det maximala antalet byte som ska läsas från den aktuella strömmen. För CLOB och NCLOB datatyper måste detta vara ett jämnt tal.
Returer
Det totala antalet byte som lästs in i bufferten. Detta kan vara mindre än antalet byte som begärs om så många byte inte är tillgängliga för närvarande eller noll (0) om strömmens slut har nåtts.
Undantag
buffer är en nullreferens (Nothing i Visual Basic).
Ett värde i parametern offset eller count är inte positivt.
-eller-
Summan av parametrarna offset och count är större än buffertlängden.
-eller-
Ett värde som anges i parametern offset är mindre än noll eller större än 4 gigabyte.
Åtgärden är inte inom en transaktion, objektet OracleLob är null eller så stängs anslutningen.
Objektet stängdes eller togs bort.
Ett Oracle-fel har inträffat.
Kommentarer
Metoden Read läser maximalt antal count byte från den aktuella strömmen och lagrar dem i buffer början av offset. Den aktuella positionen i dataströmmen avanceras av antalet lästa byte. Men om ett undantag inträffar förblir den aktuella positionen i dataströmmen oförändrad.
Read returnerar antalet lästa byte. Returvärdet är bara noll om positionen för närvarande är i slutet av strömmen.
Read blockeras tills minst en byte data kan läsas, i händelse av att inga data är tillgängliga.Read returnerar 0 om du försöker läsa från en LOB när den aktuella positionen är i slutet av LOB.
Read kan returnera färre byte än vad som begärts även om strömmens slut inte har nåtts.
.NET Framework Data Provider för Oracle hanterar alla CLOB och NCLOB data som Unicode. När du använder CLOB och NCLOB datatyper hanterar du därför alltid antalet byte, där varje tecken är 2 byte. Om till exempel en textsträng som innehåller tre tecken sparas som en NCLOB på en Oracle-server där teckenuppsättningen är 4 byte per tecken och du utför en Read åtgärd anger du längden på strängen som 6 byte, även om den lagras som 12 byte på servern.
I följande exempel visas hur du läser OracleLob objekt.
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);
}
}
Du kan skapa en OracleLob som är NULL med det här formatet:
OracleLob myLob = OracleLob.Null;
Den här tekniken används främst för att testa om en LOB som returneras från servern är NULL, vilket visas i följande exempel.
if (myLob == OracleLob.Null)
En NULL LOB fungerar på samma sätt som en noll byte LOB i som Read lyckas och returnerar alltid noll byte.