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管理対象ドライバ | ODP.NET Core |
---|---|---|---|
アセンブリ |
|
|
|
ネームスペース |
|
|
|
.NET Framework |
4.5, 4.6, 4.7 |
4.5, 4.6, 4.7 |
4.6.1以降 |
.NET Core |
- |
- |
2.1以降 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
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(); } }