OracleLob.Read(Byte[], Int32, Int32) OracleLob.Read(Byte[], Int32, Int32) OracleLob.Read(Byte[], Int32, Int32) OracleLob.Read(Byte[], Int32, Int32) Method

定義

現在の OracleLob ストリームからバイト シーケンスを読み取り、読み取ったバイト数の分だけストリーム内の位置を進めます。Reads a sequence of bytes from the current OracleLob stream and advances the position within the stream by the number of bytes read.

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[]

バイト配列。An array of bytes. このメソッドが戻るとき、指定したバイト配列の offset から (offset + count) までの値が、現在のソースから読み取られたバイトに置き換えられて含まれます。When this method returns, the buffer contains the specified byte array with the values between offset and (offset + count) replaced by the bytes read from the current source.

offset
Int32 Int32 Int32 Int32

現在のストリームから読み取ったデータの格納を開始する位置を示す buffer 内のバイト オフセット。インデックス番号は 0 から始まります。The zero-based byte offset in buffer at which to begin storing the data read from the current stream. CLOB 型および NCLOB 型の場合、これは偶数である必要があります。For CLOB and NCLOB data types, this must be an even number.

count
Int32 Int32 Int32 Int32

現在のストリームから読み取る最大バイト数。The maximum number of bytes to be read from the current stream. CLOB 型および NCLOB 型の場合、これは偶数である必要があります。For CLOB and NCLOB data types, this must be an even number.

戻り値

バッファーに読み取られた合計バイト数。The total number of bytes read into the buffer. 要求しただけのバイト数を読み取ることができなかった場合、この値は要求したバイト数より小さくなります。ストリームの末尾に到達した場合は 0 になることがあります。This may be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached.

例外

buffer が null 参照 (Visual Basic の場合は Nothing) です。The buffer is a null reference (Nothing in Visual Basic).

offset パラメーターまたは count パラメーターの値が正の値ではありません。A value in the offset or count parameter is not positive.

または-or- オフセット パラメーターとカウント パラメーターの合計値が、バッファー長を超えています。The sum of the offset and count parameters is larger than the buffer length.

または-or- amount パラメーターまたは offset パラメーターに指定された値が 0 より小さいか、4 GB を超えています。A value specified in the amount or offset parameter is less than zero or greater than 4 gigabytes.

操作がトランザクション内で実行されていないか、OracleLob オブジェクトが null か、または接続が閉じられています。The operation is not within a transaction, the OracleLob object is null, or the connection is closed.

オブジェクトが閉じられているか、破棄されています。The object was closed or disposed.

Oracle エラーが発生しました。An Oracle error has occurred.

注釈

メソッドReadは、現在のストリームcountから最大バイトを読み取り、から始まるにbuffer offset格納します。The Read method reads a maximum of count bytes from the current stream and stores them in buffer beginning at offset. ストリーム内の現在位置は、読み取ったバイト数だけ進んでいます。ただし、例外が発生した場合、ストリーム内の現在位置は変更されません。The current position within the stream is advanced by the number of bytes read; however, if an exception occurs, the current position within the stream remains unchanged. Read読み取ったバイト数を返します。Read returns the number of bytes read. 位置が現在ストリームの末尾にある場合にのみ、戻り値は0です。The return value is zero only if the position is currently at the end of the stream. Readは、データが使用できない場合に、少なくとも1バイトのデータを読み取ることができるようになるまでブロックされます。ReadRead will block until at least one byte of data can be read, in the event that no data is available.Read 現在の位置がのLOB LOB最後にあるときに、から読み取ろうとした場合は0を返します。returns 0 if you attempt to read from a LOB when the current position is at the end of LOB. Readは、ストリームの末尾に到達していない場合でも、要求されたバイト数よりも小さい値を返すことができます。Read can return fewer bytes than requested even if the end of the stream has not been reached.

Oracle 用の .NET Framework Data Provider は、 CLOBすべてNCLOBのおよびデータを Unicode として処理します。The .NET Framework Data Provider for Oracle handles all CLOB and NCLOB data as Unicode. したがって、データCLOBNCLOBおよびデータ型にアクセスする場合は、常にバイト数を処理します。各文字は2バイトです。Therefore, when accessing CLOB and NCLOB data types, you are always dealing with the number of bytes, where each character is 2 bytes. たとえば、3つの文字を含むテキストの文字列が Oracle サーバー NCLOBのとして保存されていて、文字セットが1文字に4バイトで、 Read操作を実行する場合、文字列の長さを6バイトに指定しますが、サーバーに12バイトとして格納されます。For example, if a string of text containing three characters is saved as an NCLOB on an Oracle server where the character set is 4 bytes per character, and you perform a Read operation, you specify the length of the string as 6 bytes, although it is stored as 12 bytes on the server.

次C#の例は、オブジェクトのOracleLob読み取り方法を示しています。The following C# example demonstrates how to read OracleLob objects.

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).  
      byte[] 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.  
      StreamReader streamreader = new StreamReader(CLOB, Encoding.Unicode);  
      char[] 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);  
   }  
}  

次の形式をOracleLob使用して、NULL であるを構築できます。You can construct an OracleLob that is NULL using this format:

OracleLob myLob = OracleLob.Null;  

この手法は、次の例に示すLOBように、主にサーバーから返されたが NULL かどうかをテストするために使用されます。This technique is used primarily to test whether a LOB returned from the server is NULL, as the following example illustrates.

If(myLob == OracleLob.Null)  

NULL LOBは、 LOBRead 0 バイトと同様に動作し、常にゼロバイトを返します。A NULL LOB behaves similarly to a zero byte LOB in that Read succeeds and always returns zero bytes.

適用対象