OracleLob.Write(Byte[], Int32, Int32) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee schrijft u een reeks bytes naar de huidige OracleLob stroom en wordt de huidige positie binnen deze stroom verplaatst door het aantal geschreven bytes.
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)
Parameters
- buffer
- Byte[]
Een matrix van bytes. Met deze methode wordt het aantal bytes gekopieerd dat is count opgegeven van buffer naar de huidige stroom.
- offset
- Int32
De byte-offset buffer op basis van nul waarmee bytes naar de huidige stroom worden gekopieerd. Voor CLOB en NCLOB gegevenstypen moet dit een even getal zijn.
- count
- Int32
Het aantal bytes dat naar de huidige stroom moet worden geschreven. Voor CLOB en NCLOB gegevenstypen moet dit een even getal zijn.
Uitzonderingen
De parameter buffer is een null-verwijzing (Nothing in Visual Basic).
Een waarde in de offset of count parameter is niet positief.
– of –
De som van de offset en count parameters is groter dan de buffer lengte.
– of –
Een waarde die is opgegeven in de count of offset parameter is kleiner dan nul of groter dan 4 gigabyte.
– of –
U moet gegevenstypen NCLOB opgeven CLOB als een even aantal bytes.
De bewerking bevindt zich niet binnen een transactie, het OracleLob object is null of de verbinding is gesloten.
Het object is gesloten of verwijderd.
Er is een Oracle-fout opgetreden.
Opmerkingen
Als de schrijfbewerking is geslaagd, wordt de positie binnen de stream vooruit gestegen door het aantal geschreven bytes. Als er een uitzondering optreedt, blijft de positie binnen de stream ongewijzigd.
Schrijven buiten het einde van LOB is toegestaan en vergroot het LOB aantal geschreven bytes.
De .NET Framework-Data Provider voor Oracle verwerkt alle CLOB en NCLOB-gegevens als Unicode. Daarom hebt u bij het openen CLOB en NCLOB gegevenstypen altijd te maken met het aantal bytes, waarbij elk teken 2 bytes is. Als een tekenreeks met drie tekens bijvoorbeeld wordt opgeslagen als een NCLOB Oracle-server waarop de tekenset 4 bytes per teken is en u een Write bewerking uitvoert, geeft u de lengte van de tekenreeks op als 6 bytes, hoewel deze is opgeslagen als 12 bytes op de server.
Als u naar de LOBinstructie WILT schrijven, moet u het LOB gebruik van de FOR UPDATE-component in de SQL SELECT-instructie hebben opgehaald en moet u een lokale transactie hebben gestart.
In het volgende voorbeeld ziet u hoe u naar objecten schrijft OracleLob :
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
Een schrijfbewerking naar een alleen-lezenbewerking LOB kan slagen, maar werkt de LOB bewerking niet bij op de server. In dit geval wordt de lokale kopie van de kopie LOB echter bijgewerkt. Daarom kunnen latere leesbewerkingen op het OracleLob object de resultaten van de schrijfbewerking retourneren.