6.12 OracleDataReaderクラス
OracleDataReaderオブジェクトは、順方向専用および読取り専用のインメモリー結果セットを表します。
                  
DataSetと異なり、OracleDataReaderオブジェクトは接続されたままであり、一度に1行ずつフェッチします。 
                  
次の項に、関連情報が記載されています。
クラスの継承
System.Object 
                  
  System.MarshalByRefObject 
                  
    System.Data.Common.DataReader 
                  
      System.Data.Common.DbDataReader
        Oracle.DataAccess.Client.OracleDataReader 
                  
宣言
// C# public sealed class OracleDataReader : DbDataReader, IEnumerable, IDataReader, IDisposable, IDataRecord
要件
| プロバイダ | ODP.NET管理対象外ドライバ | ODP.NET管理対象ドライバ | 
|---|---|---|
| 
                               アセンブリ  | 
                           
                               
  | 
                           
                               
  | 
                        
| 
                               ネームスペース  | 
                           
                               
  | 
                           
                               
  | 
                        
| 
                               .NET Framework  | 
                           
                               3.5, 4.5, 4.6, 4.7  | 
                           
                               4.5, 4.6, 4.7  | 
                        
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
OracleDataReaderインスタンスは、OracleCommandオブジェクトのExecuteReaderメソッドへのコールにより構成されます。DataReaderのクローズ後または処理後にアクセスできるプロパティは、IsClosedおよびRecordsAffectedのみです。
                  
オープン・データベース・カーソルの数を最小限にするには、OracleDataReaderオブジェクトを明示的に処理する必要があります。
                  
例
次のOracleDataReaderの例では、EMP表からデータが取得されます。
                  
/* Database Setup, if you have not done so yet.
connect scott/tiger@oracle 
CREATE TABLE empInfo (
empno NUMBER(4) PRIMARY KEY,
empName VARCHAR2(20) NOT NULL,
hiredate DATE,
salary NUMBER(7,2),
jobDescription Clob,
byteCodes BLOB
);
 
Insert into empInfo(EMPNO,EMPNAME,JOBDESCRIPTION,byteCodes) values 
(1,'KING','SOFTWARE ENGR', '5657');
Insert into empInfo(EMPNO,EMPNAME,JOBDESCRIPTION,byteCodes) values 
(2,'SCOTT','MANAGER', '5960');
commit;
 
*/
 
// C#
 
using System;
using System.Data;
using Oracle.DataAccess.Client; 
 
class OracleDataReaderSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    string cmdstr = "SELECT * FROM EMPINFO";
    OracleConnection connection = new OracleConnection(constr);
    OracleCommand cmd = new OracleCommand(cmdstr, con);
 
    OracleDataReader reader = cmd.ExecuteReader();
 
    // Declare the variables to retrieve the data in EmpInfo
    short empNo;
    string empName;
    DateTime hireDate;
    double salary;
    string jobDesc;
    byte[] byteCodes = new byte[10];
 
    // Read the next row until end of row
    while (reader.Read())
    {
      empNo = reader.GetInt16(0);
      Console.WriteLine("Employee number: " + empNo);
      empName = reader.GetString(1);
      Console.WriteLine("Employee name: " + empName);
 
      // The following columns can have NULL value, so it
      //   is important to call IsDBNull before getting the column data
      if (!reader.IsDBNull(2))
      {
        hireDate = reader.GetDateTime(2);
        Console.WriteLine("Hire date: " + hireDate);
      }
 
      if (!reader.IsDBNull(3))
      {
        salary = reader.GetDouble(3);
        Console.WriteLine("Salary: " + salary);
      }
 
      if (!reader.IsDBNull(4))
      {
        jobDesc = reader.GetString(4);
        Console.WriteLine("Job Description: " + jobDesc);
      }
 
      if (!reader.IsDBNull(5))
      {
        long len = reader.GetBytes(5, 0, byteCodes, 0, 10);
 
        Console.Write("Byte codes: ");
        for (int i = 0; i < len; i++)
          Console.Write(byteCodes[i].ToString("x"));
 
        Console.WriteLine();
      }
 
      Console.WriteLine();
    } 
 
    // Clean up
    reader.Dispose();
    con.Dispose();
  }
}