OracleDataReader クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
データ ソースからデータ行の前方専用ストリームを読み取る方法を提供します。 このクラスは継承できません。
public ref class OracleDataReader sealed : MarshalByRefObject, IDisposable, System::Collections::IEnumerable, System::Data::IDataReader
public ref class OracleDataReader sealed : System::Data::Common::DbDataReader
public sealed class OracleDataReader : MarshalByRefObject, IDisposable, System.Collections.IEnumerable, System.Data.IDataReader
public sealed class OracleDataReader : System.Data.Common.DbDataReader
type OracleDataReader = class
inherit MarshalByRefObject
interface IDataReader
interface IDisposable
interface IDataRecord
interface IEnumerable
type OracleDataReader = class
inherit DbDataReader
Public NotInheritable Class OracleDataReader
Inherits MarshalByRefObject
Implements IDataReader, IDisposable, IEnumerable
Public NotInheritable Class OracleDataReader
Inherits DbDataReader
- 継承
- 継承
- 実装
例
次の例では、 OracleConnection、 OracleCommand、および OracleDataReaderを作成します。 この例では、データを読み取り、コンソールに書き出します。 最後に、 OracleDataReader、 OracleConnectionを閉じます。
public void ReadData(string connectionString)
{
string queryString = "SELECT EmpNo, EName FROM Emp";
using (OracleConnection connection = new OracleConnection(connectionString))
{
OracleCommand command = new OracleCommand(queryString, connection);
connection.Open();
using(OracleDataReader reader = command.ExecuteReader())
{
// Always call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(reader.GetInt32(0) + ", " + reader.GetString(1));
}
}
}
}
Public Sub ReadData(ByVal connectionString As String)
Dim queryString As String = "SELECT EmpNo, EName FROM Emp"
Using connection As New OracleConnection(connectionString)
Dim command As New OracleCommand(queryString, connection)
connection.Open()
Using reader As OracleDataReader = command.ExecuteReader()
' Always call Read before accessing data.
While reader.Read()
Console.WriteLine(reader.GetInt32(0).ToString() + ", " _
+ reader.GetString(1))
End While
End Using
End Using
End Sub
注釈
OracleDataReaderを作成するには、コンストラクターを直接使用するのではなく、OracleCommand オブジェクトのExecuteReader メソッドを呼び出す必要があります。
データの読み取り中に別のプロセスまたはスレッドによって結果セットに加えられた変更は、 OracleDataReaderのユーザーに表示される場合があります。
IsClosed および RecordsAffected は、 OracleDataReader が閉じられた後に呼び出すことができる唯一のプロパティです。 場合によっては、RecordsAffectedを呼び出す前にCloseを呼び出す必要があります。
任意の時点で複数の OracleDataReader を開くことができます。
次の 2 つのVisual Basic例は、OracleDataReader を使用して Oracle REF CURSORを取得する方法を示しています。 これらの例では、Oracle Scott/Tiger スキーマで定義されているテーブルを使用し、次の PL/SQL パッケージとパッケージ本文が必要です。 これらの例を使用するには、サーバーでこれらを作成する必要があります。
Oracle サーバーに次の Oracle パッケージを作成します。
CREATE OR REPLACE PACKAGE CURSPKG AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
IO_CURSOR IN OUT T_CURSOR);
PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,
DEPTCURSOR OUT T_CURSOR);
END CURSPKG;
/
Oracle サーバーに次の Oracle パッケージ本文を作成します。
CREATE OR REPLACE PACKAGE BODY CURSPKG AS
PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER,
IO_CURSOR OUT T_CURSOR)
IS
V_CURSOR T_CURSOR;
BEGIN
IF N_EMPNO <> 0 THEN
OPEN V_CURSOR FOR
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.EMPNO = N_EMPNO;
ELSE
OPEN V_CURSOR FOR
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
END IF;
IO_CURSOR := V_CURSOR;
END OPEN_ONE_CURSOR;
PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR,
DEPTCURSOR OUT T_CURSOR)
IS
V_CURSOR1 T_CURSOR;
V_CURSOR2 T_CURSOR;
BEGIN
OPEN V_CURSOR1 FOR SELECT * FROM EMP;
OPEN V_CURSOR2 FOR SELECT * FROM DEPT;
EMPCURSOR := V_CURSOR1;
DEPTCURSOR := V_CURSOR2;
END OPEN_TWO_CURSORS;
END CURSPKG;
/
このVisual Basic例では、REF CURSOR パラメーターを返す PL/SQL ストアド プロシージャを実行し、値を OracleDataReader として読み取ります。
Private Sub ReadOracleData(ByVal connectionString As String)
Dim connection As New OracleConnection(connectionString)
Dim command As New OracleCommand()
Dim reader As OracleDataReader
connection.Open()
command.Connection = connection
command.CommandText = "CURSPKG.OPEN_ONE_CURSOR"
command.CommandType = CommandType.StoredProcedure
command.Parameters.Add(New OracleParameter("N_EMPNO", OracleType.Number)).Value = 7369
command.Parameters.Add(New OracleParameter("IO_CURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output
reader = command.ExecuteReader()
While (reader.Read())
' Do something with the values.
End While
reader.Close()
connection.Close()
End Sub
このVisual Basic例では、2 つの REF CURSOR パラメーターを返し、OracleDataReader を使用して値を読み取る PL/SQL ストアド プロシージャを実行します。
Private Sub ReadOracleData(ByVal connectionString As String)
Dim dataSet As New DataSet()
Dim connection As New OracleConnection(connectionString)
Dim command As New OracleCommand()
Dim reader As OracleDataReader
connection.Open()
command.Connection = connection
command.CommandText = "CURSPKG.OPEN_TWO_CURSORS"
command.CommandType = CommandType.StoredProcedure
command.Parameters.Add(New OracleParameter("EMPCURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output
command.Parameters.Add(New OracleParameter("DEPTCURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output
reader = command.ExecuteReader(CommandBehavior.CloseConnection)
While (reader.Read())
' Do something with the values.
End While
reader.NextResult()
While (reader.Read())
' Do something with the values.
End While
reader.Close()
connection.Close()
End Sub
この C# の例では、Oracle テーブルを作成し、データと共に読み込みます。 次の例を実行する前に、この例を実行する必要があります。この例では、OracleType 構造体を使用してデータにアクセスするための OracleDataReader の使用を示します。
public void Setup(string connectionString)
{
OracleConnection connection = new OracleConnection(connectionString);
try
{
connection.Open();
OracleCommand command = connection.CreateCommand();
command.CommandText ="CREATE TABLE OracleTypesTable (MyVarchar2 varchar2(3000),MyNumber number(28,4) PRIMARY KEY,MyDate date, MyRaw raw(255))";
command.ExecuteNonQuery();
command.CommandText ="INSERT INTO OracleTypesTable VALUES ('test', 2, to_date('2000-01-11 12:54:01','yyyy-mm-dd hh24:mi:ss'), '0001020304')";
command.ExecuteNonQuery();
command.CommandText="SELECT * FROM OracleTypesTable";
}
catch(Exception)
{
}
finally
{
connection.Close();
}
}
この C# の例では、 OracleDataReader を使用してデータにアクセスし、複数の OracleType 構造を使用してデータを表示します。
public void ReadOracleTypesExample(string connectionString)
{
OracleConnection connection = new OracleConnection(connectionString);
connection.Open();
OracleCommand command = connection.CreateCommand();
try
{
command.CommandText = "SELECT * FROM OracleTypesTable";
OracleDataReader reader = command.ExecuteReader();
reader.Read();
//Using the Oracle specific getters for each type is faster than
//using GetOracleValue.
//First column, MyVarchar2, is a VARCHAR2 data type in Oracle Server
//and maps to OracleString.
OracleString oraclestring1 = reader.GetOracleString(0);
Console.WriteLine("OracleString " + oraclestring1.ToString());
//Second column, MyNumber, is a NUMBER data type in Oracle Server
//and maps to OracleNumber.
OracleNumber oraclenumber1 = reader.GetOracleNumber(1);
Console.WriteLine("OracleNumber " + oraclenumber1.ToString());
//Third column, MyDate, is a DATA data type in Oracle Server
//and maps to OracleDateTime.
OracleDateTime oracledatetime1 = reader.GetOracleDateTime(2);
Console.WriteLine("OracleDateTime " + oracledatetime1.ToString());
//Fourth column, MyRaw, is a RAW data type in Oracle Server and
//maps to OracleBinary.
OracleBinary oraclebinary1 = reader.GetOracleBinary(3);
//Calling value on a null OracleBinary throws
//OracleNullValueException; therefore, check for a null value.
if (oraclebinary1.IsNull==false)
{
foreach(byte b in oraclebinary1.Value)
{
Console.WriteLine("byte " + b.ToString());
}
}
reader.Close();
}
catch(Exception e)
{
Console.WriteLine(e.ToString());
}
finally
{
connection.Close();
}
}
プロパティ
| 名前 | 説明 |
|---|---|
| Depth |
現在の行の入れ子の深さを示す値を取得します。 |
| FieldCount |
現在の行の列数を取得します。 |
| HasRows |
OracleDataReaderに 1 つ以上の行が含まれているかどうかを示す値を取得します。 |
| IsClosed |
OracleDataReaderが閉じているかどうかを示します。 |
| Item[Int32] |
列の序数を指定して、指定した列の値をネイティブ形式で取得します。 |
| Item[String] |
列名を指定して、指定した列の値をネイティブ形式で取得します。 |
| RecordsAffected |
SQL ステートメントの実行によって変更、挿入、または削除された行の数を取得します。 |
| VisibleFieldCount |
非表示ではない DbDataReader 内のフィールドの数を取得します。 (継承元 DbDataReader) |
メソッド
| 名前 | 説明 |
|---|---|
| Close() |
OracleDataReader オブジェクトを閉じます。 |
| CreateObjRef(Type) |
リモート オブジェクトとの通信に使用されるプロキシの生成に必要なすべての関連情報を含むオブジェクトを作成します。 (継承元 MarshalByRefObject) |
| Dispose() |
このオブジェクトによって使用されるリソースを解放します。 |
| Dispose() |
DbDataReader クラスの現在のインスタンスで使用されているすべてのリソースを解放します。 (継承元 DbDataReader) |
| Dispose(Boolean) |
DbDataReaderによって使用されるアンマネージ リソースを解放し、必要に応じてマネージド リソースを解放します。 (継承元 DbDataReader) |
| Equals(Object) |
指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
| GetBoolean(Int32) |
指定した列の値をブール値として取得します。 |
| GetByte(Int32) |
指定した列の値をバイトとして取得します。 |
| GetBytes(Int32, Int64, Byte[], Int32, Int32) |
指定されたバッファー オフセットから始まる、指定した列オフセットからバッファーへのバイト ストリームを配列として読み取ります。 |
| GetChar(Int32) |
指定した列の値を文字として取得します。 |
| GetChars(Int32, Int64, Char[], Int32, Int32) |
指定されたバッファー オフセットから始まる、指定した列オフセットからバッファーに文字のストリームを配列として読み取ります。 |
| GetData(Int32) |
指定した列序数の IDataReader を返します。 |
| GetData(Int32) |
要求された列の入れ子になったデータ リーダーを返します。 (継承元 DbDataReader) |
| GetDataTypeName(Int32) |
ソース データ型の名前を取得します。 |
| GetDateTime(Int32) |
指定した列の値を |
| GetDbDataReader(Int32) |
プロバイダー固有の実装でオーバーライドできる、要求された列序数の DbDataReader オブジェクトを返します。 (継承元 DbDataReader) |
| GetDecimal(Int32) |
指定した列の値を |
| GetDouble(Int32) |
指定した列の値を倍精度浮動小数点数として取得します。 |
| GetEnumerator() |
データ リーダー内の行を反復処理するために使用できる IEnumerator を返します。 |
| GetFieldType(Int32) |
オブジェクトのデータ型である Type を取得します。 |
| GetFieldValue<T>(Int32) |
指定した列の値を要求された型として取得します。 (継承元 DbDataReader) |
| GetFieldValueAsync<T>(Int32, CancellationToken) |
指定した列の値を要求された型として非同期的に取得します。 (継承元 DbDataReader) |
| GetFieldValueAsync<T>(Int32) |
指定した列の値を要求された型として非同期的に取得します。 (継承元 DbDataReader) |
| GetFloat(Int32) |
指定した列の値を単精度浮動小数点数として取得します。 |
| GetGuid(Int32) |
指定した列の値をグローバル一意識別子 (GUID) として取得します。 |
| GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
| GetInt16(Int32) |
指定した列の値を 16 ビット符号付き整数として取得します。 |
| GetInt32(Int32) |
指定した列の値を 32 ビット符号付き整数として取得します。 |
| GetInt64(Int32) |
指定した列の値を 64 ビット符号付き整数として取得します。 |
| GetLifetimeService() |
このインスタンスの有効期間ポリシーを制御する現在の有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
| GetName(Int32) |
指定した列の名前を取得します。 |
| GetOracleBFile(Int32) |
指定した列の値を OracleBFile オブジェクトとして取得します。 |
| GetOracleBinary(Int32) |
指定した列の値を OracleBinary オブジェクトとして取得します。 |
| GetOracleDateTime(Int32) |
指定した列の値を OracleDateTime オブジェクトとして取得します。 |
| GetOracleLob(Int32) |
指定した列の値を OracleLob オブジェクトとして取得します。 |
| GetOracleMonthSpan(Int32) |
指定した列の値を OracleMonthSpan オブジェクトとして取得します。 |
| GetOracleNumber(Int32) |
指定した列の値を OracleNumber オブジェクトとして取得します。 |
| GetOracleString(Int32) |
指定した列の値を OracleString オブジェクトとして取得します。 |
| GetOracleTimeSpan(Int32) |
指定した列の値を OracleTimeSpan オブジェクトとして取得します。 |
| GetOracleValue(Int32) |
指定した序数の列の値を Oracle 形式で取得します。 |
| GetOracleValues(Object[]) |
Oracle 形式の現在の行のすべての属性列を取得します。 |
| GetOrdinal(String) |
列の名前を指定して、列の序数を取得します。 |
| GetProviderSpecificFieldType(Int32) |
基になるプロバイダー固有のフィールド型の表現である |
| GetProviderSpecificValue(Int32) |
基になるプロバイダー固有のフィールド型の表現である |
| GetProviderSpecificValues(Object[]) |
基になるプロバイダー固有の値の表現であるオブジェクトの配列を取得します。 |
| GetSchemaTable() |
OracleDataReader の列メタデータを記述する DataTable を返します。 |
| GetStream(Int32) |
指定した列からデータを取得するストリームを取得します。 (継承元 DbDataReader) |
| GetString(Int32) |
指定した列の値を文字列として取得します。 |
| GetTextReader(Int32) |
列からデータを取得するテキスト リーダーを取得します。 (継承元 DbDataReader) |
| GetTimeSpan(Int32) |
指定した列の値を |
| GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
| GetValue(Int32) |
指定した序数の列の値をネイティブ形式で取得します。 |
| GetValues(Object[]) |
オブジェクトの配列に現在の行の列値を設定します。 |
| InitializeLifetimeService() |
このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。 (継承元 MarshalByRefObject) |
| IsDBNull(Int32) |
列に存在しない値または欠損値が含まれているかどうかを示す値を取得します。 |
| IsDBNullAsync(Int32, CancellationToken) |
列に存在しない値または欠損値が含まれているかどうかを示す値を非同期で取得します。 (継承元 DbDataReader) |
| IsDBNullAsync(Int32) |
列に存在しない値または欠損値が含まれているかどうかを示す値を非同期で取得します。 (継承元 DbDataReader) |
| MemberwiseClone() |
現在の Objectの簡易コピーを作成します。 (継承元 Object) |
| MemberwiseClone(Boolean) |
現在の MarshalByRefObject オブジェクトの簡易コピーを作成します。 (継承元 MarshalByRefObject) |
| NextResult() |
OracleDataReaderを次の結果に進めます。 |
| NextResultAsync() |
ステートメントのバッチの結果を読み取るときに、リーダーを次の結果に非同期的に進めます。 (継承元 DbDataReader) |
| NextResultAsync(CancellationToken) |
ステートメントのバッチの結果を読み取るときに、リーダーを次の結果に非同期的に進めます。 (継承元 DbDataReader) |
| Read() |
OracleDataReaderを次のレコードに進めます。 |
| ReadAsync() |
リーダーを結果セット内の次のレコードに非同期的に進めます。 (継承元 DbDataReader) |
| ReadAsync(CancellationToken) |
リーダーを結果セット内の次のレコードに非同期的に進めます。 (継承元 DbDataReader) |
| ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
明示的なインターフェイスの実装
| 名前 | 説明 |
|---|---|
| IDataRecord.GetData(Int32) |
このメンバーの説明については、 GetData(Int32)を参照してください。 (継承元 DbDataReader) |
| IEnumerable.GetEnumerator() |
コレクションを反復処理する列挙子を返します。 |
拡張メソッド
| 名前 | 説明 |
|---|---|
| AsParallel(IEnumerable) |
クエリの並列化を有効にします。 |
| AsQueryable(IEnumerable) |
IEnumerable を IQueryableに変換します。 |
| CanGetColumnSchema(DbDataReader) |
DbDataReaderが列スキーマを取得できるかどうかを示す値を取得します。 |
| Cast<TResult>(IEnumerable) |
IEnumerable の要素を指定した型にキャストします。 |
| GetColumnSchema(DbDataReader) |
DbColumnの列スキーマ (DbDataReader コレクション) を取得します。 |
| OfType<TResult>(IEnumerable) |
指定した型に基づいて、IEnumerable の要素をフィルター処理します。 |