OracleLob.Read(Byte[], Int32, Int32) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
現在の OracleLob ストリームからバイト シーケンスを読み取り、読み取ったバイト数の分だけストリーム内の位置を進めます。
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
パラメーター
- buffer
- Byte[]
バイト配列。 このメソッドが戻るとき、指定したバイト配列の offset
から (offset
+ count
) までの値が、現在のソースから読み取られたバイトに置き換えられて含まれます。
- offset
- Int32
現在のストリームから読み取ったデータの格納を開始する位置を示す buffer
内のバイト オフセット。インデックス番号は 0 から始まります。
CLOB
型および NCLOB
型の場合、これは偶数である必要があります。
- count
- Int32
現在のストリームから読み取る最大バイト数。
CLOB
型および NCLOB
型の場合、これは偶数である必要があります。
戻り値
バッファーに読み取られた合計バイト数。 要求しただけのバイト数を読み取ることができなかった場合、この値は要求したバイト数より小さくなります。ストリームの末尾に到達した場合は 0 になることがあります。
例外
buffer
が null 参照 (Visual Basic の場合は Nothing
) です。
offset
パラメーターまたは count
パラメーターの値が正の値ではありません。
- または -
オフセット パラメーターとカウント パラメーターの合計値が、バッファー長を超えています。
- または -
amount
パラメーターまたは offset
パラメーターに指定された値が 0 より小さいか、4 GB を超えています。
操作がトランザクション内で実行されていないか、OracleLob オブジェクトが null か、または接続が閉じられています。
オブジェクトが閉じられているか、破棄されています。
Oracle エラーが発生しました。
注釈
メソッドはRead、現在のcount
ストリームから最大バイト数を読み取り、 でoffset
始まるにbuffer
格納します。 ストリーム内の現在の位置は、読み取られたバイト数だけ進みます。ただし、例外が発生した場合、ストリーム内の現在の位置は変更されません。
Read は読み取られたバイト数を返します。 位置が現在ストリームの末尾にある場合にのみ、戻り値は 0 です。
Readは、データが使用できない場合に、少なくとも 1 バイトのデータを読み取ることができるまでブロックします。Read現在の位置が の末尾LOB
にあるときに からLOB
読み取ろうとすると、 は 0 を返します。
Read は、ストリームの末尾に達していない場合でも、要求されたバイト数よりも少ないバイト数を返すことができます。
.NET Framework Data Provider for Oracle は、すべてのCLOB
データとデータを NCLOB
Unicode として処理します。 したがって、および NCLOB
データ型にアクセスするCLOB
場合は、常にバイト数を処理します。各文字は 2 バイトです。 たとえば、3 文字を含むテキストの文字列が、1 文字あたり 4 バイトの Oracle サーバーに として NCLOB
保存され、操作を実行 Read
する場合は、サーバーに 12 バイトとして格納されますが、文字列の長さは 6 バイトとして指定します。
次の例では、オブジェクトを読み取 OracleLob る方法を示します。
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);
}
}
次の形式を使用して、NULL である を OracleLob 構築できます。
OracleLob myLob = OracleLob.Null;
この手法は、主に、次の例に示すように、サーバーから返される が NULL かどうかを LOB
テストするために使用されます。
if (myLob == OracleLob.Null)
NULL LOB
は、 で成功し、常に 0 バイトを返す Read 0 バイトLOB
と同様に動作します。
適用対象
.NET