Oracle® Data Provider for .NET開発者ガイド ODAC 12c リリース4 (12.1.0.2) for Microsoft Windows E72575-01 |
|
前 |
次 |
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管理対象ドライバ |
アセンブリ | Oracle.DataAccess.dll |
Oracle.ManagedDataAccess.dll |
ネームスペース | Oracle.DataAccess.Client |
Oracle.ManagedDataAccess.Client |
.NET Framework | 3.5, 4.0, 4.5, 4.6 | 4.0, 4.5, 4.6 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
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(); } }
OracleDataReader
メンバーは、次の表にリストされています。
OracleDataReader静的メソッド
OracleDataReader
静的メソッドを、表6-55にリストします。
OracleDataReaderプロパティ
OracleDataReader
プロパティを、表6-56にリストします。
表6-56 OracleDataReaderプロパティ
プロパティ | 説明 |
---|---|
現在の行に対するネスティングの深さを示す値を取得します |
|
|
|
結果セット内の列数を取得します |
|
|
|
|
非表示の |
データ・リーダーがクローズされているかどうかを示します |
|
列値を取得します(オーバーロード) |
|
|
LOB列について |
|
|
SQL文の実行によって変更、挿入または削除された行数を取得します |
|
|
|
|
値を返すとき、 |
|
非表示ではない |
OracleDataReaderパブリック・メソッド
OracleDataReader
パブリック・メソッドを、表6-57にリストします。
表6-57 OracleDataReaderパブリック・メソッド
パブリック・メソッド | 説明 |
---|---|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
|
サポート対象外 |
|
指定された列のバイト値を戻します |
|
列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を移入します |
|
サポート対象外 |
|
列の指定されたオフセット(文字)から、最高の場合最大文字数を使用して、指定された文字配列を移入します |
|
|
サポート対象外 |
指定された列のODP.NETタイプ名を戻します |
|
指定された列の |
|
指定された |
|
指定された |
|
|
コレクションから反復するのに使用できる |
指定された列の |
|
指定された |
|
サポート対象外 |
|
|
|
指定された |
|
指定された |
|
指定された |
|
|
|
指定された列名を戻します |
|
指定された |
|
指定された列の |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
|
指定された |
指定された列の |
|
Oracle |
|
指定されたOracle |
|
指定されたOracle |
|
指定された |
|
指定された列値をODP.NETタイプとして戻します |
|
すべての列値をODP.NETタイプとして取得します |
|
指定された列名の |
|
|
指定された列のプロバイダ固有のタイプを戻します |
|
指定した序数の基礎となるプロバイダ固有の値を表すオブジェクトを戻します。 |
|
基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します。 |
|
|
指定された列の文字列値を戻します |
|
指定された |
|
|
|
列値を.NETタイプとして戻します |
|
すべての列値を.NETタイプとして取得します |
|
|
|
列値がNULLかどうかを示します |
|
結果の読取り中にデータ・リーダーを次の結果セットに拡張します |
|
結果セットで次の行を読み取ります |
|
|
|
OracleDataReader
プロパティを、表6-59にリストします。
表6-59 OracleDataReaderプロパティ
プロパティ | 説明 |
---|---|
現在の行に対するネスティングの深さを示す値を取得します |
|
|
|
結果セット内の列数を取得します |
|
|
|
|
非表示の |
データ・リーダーがクローズされているかどうかを示します |
|
列値を取得します(オーバーロード) |
|
|
LOB列について |
|
|
SQL文の実行によって変更、挿入または削除された行数を取得します |
|
|
|
|
値を返すとき、 |
|
非表示ではない |
このプロパティでは、現在の行に対するネスティングの深さを示す値を取得します。
宣言
// C# public override int Depth {get;}
プロパティ値
現在の行に対するネスティングの深さ
実装
IDataReader
例外
InvalidOperationException
- リーダーがクローズされています。
備考
デフォルト = 0
Oracleではネスティングがサポートされていないため、このプロパティは常にゼロを戻します。
このプロパティは、OracleDataReader
の内部キャッシュのサイズを指定します。
宣言
// C# public long FetchSize {get; set;}
プロパティ値
OracleDataReader
が内部キャッシュに使用するメモリーの量(バイト表示)を指定するlong
例外
ArgumentException
- 指定したFetchSize
値は無効です。
備考
デフォルト = OracleCommand
のFetchSize
プロパティ値。
FetchSize
プロパティは、結果セットを戻すコマンドを実行して作成したOracleDataReader
により、継承されます。OracleDataReader
オブジェクト上のFetchSize
プロパティにより、データベース・ラウンドトリップごとの内部キャッシュにフェッチされるデータ量が決定されます。
RowSize
およびFetchSize
プロパティは、他のスカラー・データ型とは異なる方法でUDTおよびXMLType
データを処理します。ODP.NETの内部キャッシュにはUDTおよびXMLType
データへの参照のみが格納されているため、RowSize
プロパティはUDTおよびXMLType
データの実際のサイズではなく、参照に必要なメモリー(非常に少量)のみを算定します。その結果、アプリケーションは1回のデータベース・ラウンドトリップで多数のUDTまたはXMLType
インスタンスをデータベースからフェッチしてしまう可能性があります。これは、UDTおよびXMLType
データの実際のサイズがFetchSize
に対するものではなく、デフォルトのキャッシュ・サイズである131072バイトを満たすには非常に多くのUDTおよびXMLType
参照が必要となるためです。したがって、UDTまたはXMLType
データをフェッチする際には、フェッチする実際のUDTおよびXMLType
データの総量ではなく、対象UDTおよびXMLType
インスタンスの数を制御するよう、FetchSize
プロパティを適切に構成する必要があります。
注意: LOBおよびLONG
データ型の場合、選択リストの各LOBのキャッシュによって保持されたメタデータおよび参照情報に加えて、InitialLOBFetchSize
およびInitialLONGFetchSize
プロパティで指定されたサイズのみがRowSize
プロパティによって算定されます。
関連項目:
|
このプロパティでは、結果セット内の列数を戻します。
宣言
// C# public override int FieldCount {get;}
プロパティ値
列が存在する場合は結果セット内の列数、それ以外は0
実装
IDataRecord
例外
InvalidOperationException
- リーダーがクローズされています。
備考
デフォルト = 0
このプロパティには、結果セットを戻さない問合せに対する0の値が含まれています。
このプロパティは、OracleDataReader
に1つ以上の行があるかどうかを示します。
宣言
// C# public override bool HasRows {get;}
戻り値
bool
備考
HasRows
は、OracleDataReader
に行が含まれているかどうかを示します
HasRows
の値が行の位置に基づいて変わることはありません。たとえば、アプリケーションで結果セットから行をすべて読み取り、次のReadメソッドの起動によりFalseが戻される場合でも、結果セットが最初から空であったわけではないので、HasRows
プロパティはTrueを戻します。
OracleDataReader
オブジェクトの作成後にHasRows
プロパティが初めてアクセスされたときに、行がフェッチされ、OracleDataReader
が空かどうかが判断されます。
例
// C# using System; using Oracle.DataAccess.Client; class HasRowsSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); OracleCommand cmd = new OracleCommand( "select * from emp where empno = 9999", con); OracleDataReader reader = cmd.ExecuteReader(); if (!reader.HasRows) Console.WriteLine("The result set is empty."); else Console.WriteLine("The result set is not empty."); con.Dispose(); } }
関連項目:
|
このプロパティでは、非表示のOracleDataReader
内のフィールド数が取得されます。
宣言
// C# public int HiddenFieldcount { get; }
プロパティ値
非表示のOracleDataReader
内のフィールド数が取得されます。
例外
InvalidOperationException
- リーダーがクローズされています。
備考
OracleDataReader.FieldCount
およびOracleDataReader.VisibleFieldCount
では、表示できるフィールド・カウントが戻されます。
このプロパティは、データ・リーダーがクローズされているかどうかを示します。
宣言
// C# public override bool IsClosed {get;}
プロパティ値
OracleDataReader
がクローズの状態にある場合はtrue
を戻し、それ以外の場合はfalse
を戻します。
実装
IDataReader
備考
デフォルト = true
OracleDataReader
のクローズ後にアクセス可能なプロパティは、IsClosed
およびRecordsAffected
のみです。
このプロパティでは、.NETデータ型で列の値を取得します。
オーバーロード・リスト:
このプロパティでは、列索引で指定された列の.NET Value
を取得します。
このプロパティでは、列名で指定された列の.NET Value
を取得します。
このプロパティでは、列索引で指定された列の.NET Value
を取得します。
宣言
// C# public override object this[int index] {get;}
パラメータ
index
ゼロベースの列の索引
プロパティ値
指定された列の.NET値
実装
IDataRecord
備考
デフォルト = 適用不可
C#では、このプロパティでこのクラスの索引付けをします。
このプロパティでは、列名で指定された列の.NET Value
を取得します。
宣言
// C#
public override object this[string columnName] {get;}
パラメータ
columnName
列の名前です。
プロパティ値
指定された列の.NET Value
実装
IDataRecord
備考
デフォルト = 適用不可
指定された列を列名で特定するには、大/小文字を区別して検索します。これで特定できない場合は、大/小文字を区別せずに検索します。
C#では、このプロパティでこのクラスの索引付けをします。
このプロパティは、OracleDataReader
がLOB列に対して最初にフェッチする量を指定します。
宣言
// C# public int InitialLOBFetchSize {get;}
プロパティ値
取り出すチャンクのサイズです。
例外
InvalidOperationException
- リーダーがクローズされています。
備考
InitialLOBFetchSize
に対してサポートされている最大値は2GBです。
デフォルトはOracleCommand.InitialLOBFetchSize
であり、これからこの値が継承されます。
関連項目:
|
このプロパティでは、OracleDataReader
がLONG
およびLONG
RAW
列に対して最初にフェッチする量を指定します。
宣言
// C# public long InitialLONGFetchSize {get;}
プロパティ値
取り出すチャンクのサイズです。デフォルトは0
です。
例外
InvalidOperationException
- リーダーがクローズされています。
備考
InitialLONGFetchSize
に対してサポートされている最大値は32767
です。このプロパティがそれより大きい値に設定されている場合は、プロバイダによって32767
にリセットされます。
デフォルトはOracleCommand.InitialLONGFetchSize
であり、これからこの値が継承されます。
このプロパティは、OracleDataReader
に対して読取りのみです。
関連項目:
|
このプロパティでは、SQL文の実行によって変更、挿入または削除された行数を取得します。
宣言
// C# public int RecordsAffected {get;}
プロパティ値
SQL文の実行により影響を受けた行数
実装
IDataReader
備考
デフォルト = 0
値-1
がSELECT
文に戻されます。
OracleDataReader
のクローズ後にアクセス可能なプロパティは、IsClosed
およびRecordsAffected
のみです。
このプロパティは、OracleDataReader
の内部キャッシュが1行のデータを格納するために必要なメモリー量を取得します。
宣言
// C# public long RowSize {get;}
プロパティ値
long
は、OracleDataReader
が実行された問合せのデータ1行を格納するために必要とするメモリー量(バイト)を示します。
備考
OracleDataReader
オブジェクトが作成されると、RowSize
プロパティはゼロ以外の値に設定されます。このプロパティは、行数に基づいて設計時またはFetchSize
を設定する場合に、設計時または実行時に動的に使用できます。たとえば、OracleDataReader
オブジェクトを有効にして、データベース・ラウンドトリップごとにN
行をフェッチするには、OracleDataReader
FetchSize
プロパティをRowSize
*
N
に動的に設定できます。FetchSize
プロパティを適切に有効化するには、特定の結果セットに対してOracleDataReader.Read()
を最初に起動する前に設定する必要があることに注意してください。
ODP.NETのRowSize
値の計算では、現在、VARCHAR2
型、NVARCHAR2
型、RAW
型の列について、32Kまでの値をサポートしています。
この読取り専用プロパティは、値を返すときにOracleDataReader
がEntity Data Modelマッピング構成値を使用するかどうかを示します。
宣言
// C# public bool UseEdmMapping {get;}
プロパティ値
値を返すときにOracleDataReader
がEntity Data Modelマッピング構成値を使用するかどうかを示すboolean
。
備考
デフォルトはfalse
です。
値はOracleCommand
オブジェクトから継承されます。
このプロパティでは、非表示ではないOracleDataReader
内のフィールド数が取得されます。
宣言
// C# public override int VisibleFieldcount { get; }
プロパティ値
非表示ではないフィールド数が取得されます。
例外
InvalidOperationException
- リーダーがクローズされています。
備考
アプリケーションがOracleCommand
オブジェクトのAddRowid
プロパティをtrue
に設定すると、アプリケーションはRowId
にアクセスできますが、これは表示可能なフィールドではありません。SELECT文リストにRowId
が追加されている場合は、このフィールドは表示可能です。OracleDataReader.VisibleFieldCount
およびOracleDataReader.FieldCount
は、必ず同じ値を持っています。
例
// C# using System; using System.Data; using System.Data.Common; using Oracle.DataAccess.Client; class VisibleFieldCountSample { static void Main(string[] args) { string constr = "User Id=scott; Password=tiger; Data Source=oracle;"; DbProviderFactory factory = DbProviderFactories.GetFactory("Oracle.DataAccess.Client"); using (DbConnection conn = factory.CreateConnection()) { conn.ConnectionString = constr; try { conn.Open(); OracleCommand cmd = (OracleCommand)factory.CreateCommand(); cmd.Connection = (OracleConnection)conn; //to gain access to ROWIDs of the table cmd.AddRowid = true; cmd.CommandText = "select empno, ename from emp;"; OracleDataReader reader = cmd.ExecuteReader(); int visFC = reader.VisibleFieldCount; //Results in 2 int hidFC = reader.HiddenFieldCount; // Results in 1 Console.Write("Visible field count: " + visFC); Console.Write("Hidden field count: " + hidFC); reader.Dispose(); cmd.Dispose(); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } } } }
OracleDataReader
パブリック・メソッドを、表6-60にリストします。
表6-60 OracleDataReaderパブリック・メソッド
パブリック・メソッド | 説明 |
---|---|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
|
サポート対象外 |
|
指定された列のバイト値を戻します |
|
列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を移入します |
|
サポート対象外 |
|
列の指定されたオフセット(文字)から、最高の場合最大文字数を使用して、指定された文字配列を移入します |
|
|
サポート対象外 |
指定された列のODP.NETタイプ名を戻します |
|
指定された列の |
|
指定された |
|
指定された |
|
|
コレクションから反復するのに使用できる |
指定された列の |
|
指定された |
|
サポート対象外 |
|
|
|
指定された |
|
指定された |
|
指定された |
|
|
|
指定された列名を戻します |
|
指定された |
|
指定された列の |
|
指定された |
|
指定された ODP.NET管理対象ドライバでは使用できません |
|
指定された |
|
指定された ODP.NET管理対象ドライバでは使用できません |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
|
指定された ODP.NET管理対象ドライバでは使用できません |
指定された列の |
|
Oracle |
|
指定されたOracle |
|
指定されたOracle |
|
指定された ODP.NET管理対象ドライバでは使用できません |
|
指定された列値をODP.NETタイプとして戻します |
|
すべての列値をODP.NETタイプとして取得します |
|
指定された列名の |
|
|
指定された列のプロバイダ固有のタイプを戻します |
|
指定した序数の基礎となるプロバイダ固有の値を表すオブジェクトを戻します。 |
|
基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します。 |
|
|
指定された列の文字列値を戻します |
|
指定された |
|
|
|
列値を.NETタイプとして戻します |
|
すべての列値を.NETタイプとして取得します |
|
|
|
列値がNULLかどうかを示します |
|
結果の読取り中にデータ・リーダーを次の結果セットに拡張します |
|
結果セットで次の行を読み取ります |
|
|
|
このメソッドはOracleDataReader
をクローズします。
宣言
// C# public override void Close();
実装
IDataReader
備考
Close
メソッドは、OracleDataReader
に関連付けられているすべてのリソースを解除します。
例
OracleDataReader
クラスのコード例には、Close
メソッドが含まれています。OracleDataReader
概要の「例」を参照してください。
このメソッドでは、オブジェクトにより割り当てられたリソースまたはメモリーを解除します。
宣言
// C# public void Dispose();
実装
IDisposable
備考
Dispose
メソッドでは、OracleDataReader
もクローズします。
このメソッドは、サポートされていません。
宣言
// C#
public override bool GetBoolean(int index);
パラメータ
index
ゼロベースの列索引です。
実装
IDataRecord
例外
NotSupportedException
- このプロパティは、サポートされていません。
このメソッドは、指定された列のバイト値を戻します。
宣言
// C#
public override byte GetByte(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
バイト表示の列の値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を作成します。
宣言
// C# public override long GetBytes(int index, long fieldOffset, byte[] buffer, int bufferOffset, int length);
パラメータ
index
ゼロベースの列索引です。
fieldOffset
読取り開始対象の列内のオフセット(バイト)
buffer
データの読取り先のバイト配列
bufferOffset
データ読取り開始対象の、バッファ内のオフセット(バイト)
length
読取りを行う最大バイト数(バイト)
戻り値
読取りが終了したバイト数
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドは、バッファに読み取られたバイト数を戻します。メソッドが同じ列に対して前に呼び出されている場合は、バイト数は実際のフィールド長より短くなる場合があります。
NULL参照がバッファに渡された場合、バイト表示のフィールド長が戻されます。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、サポートされていません。
宣言
// C#
public override long GetChar(int index);
パラメータ
index
ゼロベースの列索引
実装
IDataRecord
例外
NotSupportedException
- このプロパティは、サポートされていません。
このメソッドは、列の指定されたオフセット(文字表示)から、最高の場合最大文字数を使用して、指定された文字配列を作成します。
宣言
// C# public override long GetChars(int index, long fieldOffset, char[] buffer, int bufferOffset, int length);
パラメータ
index
ゼロベースの列索引
fieldOffset
読取り開始対象の列内の索引(文字)
buffer
データの読取り先の文字配列
bufferOffset
データ読取り開始対象の、バッファ内の索引(文字)
length
読取りを行う最大文字数(文字)
戻り値
読取りが終了した文字数
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドは、バッファに読み取られた文字数を戻します。メソッドが同じ列に対して前に呼び出されている場合は、文字数は実際のフィールド長より短くなる場合があります。
NULL参照がバッファに渡された場合、文字表示のフィールド長が戻されます。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定された列のODP.NETタイプ名を戻します。
宣言
// C#
public override string GetDataTypeName(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のODP.NETタイプの名前
実装
IDataRecord
例外
InvalidOperationException
- リーダーがクローズされています。
IndexOutOfRangeException
- 列索引が無効です。
このメソッドは、指定された列のDateTime
値を戻します。
宣言
// C#
public override DateTime GetDateTime(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のDateTime
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列のdecimal
値を戻します。
宣言
// C#
public override decimal GetDecimal(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のdecimal
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列またはBINARY_DOUBLE
列のdouble
値を戻します。
宣言
// C#
public override double GetDouble(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のdouble
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
GetDouble
は、BINARY_DOUBLE
列からのデータの取得をサポートするようになりました。
このメソッドでは、コレクション(レコード・セット)から反復できるIEnumerator
が戻されます。
宣言
// C# public override IEnumerator GetEnumerator();
戻り値
コレクション(レコード・セット)から反復できるIEnumerator
。
例外
InvalidOperationException
- リーダーがクローズされています。
このメソッドは、指定された列のType
を戻します。
宣言
// C#
public override Type GetFieldType(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のデフォルト.NETタイプのtype
。
実装
IDataRecord
例外
InvalidOperationException
- リーダーがクローズされているか、指定された列はUDTですがUDTに対する登録済カスタム・タイプ・マッピングが存在しません。
IndexOutOfRangeException
- 列索引が無効です。
備考
GetFieldType
は、OracleDataReader
上のGetValue
アクセッサまたはItem
プロパティの起動後に、アプリケーションが取得する値に対応するタイプを戻します。たとえば、列が文字列である場合、このメソッドは.NET文字列に対する.NETタイプ・オブジェクトを戻します。
属性がUDTである場合、このメソッドは次のいずれかを戻します。
カスタム・タイプ・マッピングがOracleオブジェクトまたはコレクションに対して存在する場合は、カスタム・タイプの.NETタイプ。
列がOracle REF
である場合は、文字列の.NETタイプ。
このメソッドは、指定されたNUMBER
列またはBINARY_FLOAT
列のfloat
値を戻します。
宣言
// C#
public override float GetFloat(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のfloat
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
GetFloat
は、BINARY_FLOAT
列からのデータの取得をサポートするようになりました。
このメソッドは、サポートされていません。
宣言
// C#
public override Guid GetGuid(int index);
パラメータ
index
ゼロベースの列索引です。
実装
IDataRecord
例外
NotSupportedException
- このプロパティは、サポートされていません。
このメソッドは、指定されたNUMBER
列のInt16
値を戻します。
注意: short はInt16 と等価です。 |
宣言
// C#
public override short GetInt16(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のInt16
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列のInt32
値を戻します。
注意: int はInt32 と等価です。 |
宣言
// C#
public override int GetInt32(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のInt32
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列のInt64
値を戻します。
注意: long はInt64 と等価です。 |
宣言
// C#
public override long GetInt64(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のInt64
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定された列の列名を戻します。
宣言
// C#
public override string GetName(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列の名前です。
実装
IDataRecord
例外
InvalidOperationException
- リーダーがクローズされています。
IndexOutOfRangeException
- 列索引が無効です。
このメソッドは、指定されたBFILE
列のOracleBFile
オブジェクトを戻します。
宣言
// C#
public OracleBFile GetOracleBFile(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleBFile
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定された列のOracleBinary
構造を戻します。
宣言
// C#
public OracleBinary GetOracleBinary(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleBinary
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
GetOracleBinary
は、次のOracleタイプで使用されています。
BFILE
BLOB
LONG
RAW
RAW
このメソッドは、指定されたBLOB
列のOracleBlob
オブジェクトを戻します。
宣言
// C#
public OracleBlob GetOracleBlob(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleBlob
値です。
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
GetOracleBlobForUpdate
は、指定されたBLOB
列の更新可能なOracleBlob
オブジェクトを戻します。
オーバーロード・リスト:
このメソッドは、指定されたBLOB
列の更新可能なOracleBlob
オブジェクトを戻します。
GetOracleBlobForUpdate(int, int)
このメソッドはWAIT
句を使用して、指定されたBLOB
列の更新可能なOracleBlob
オブジェクトを戻します。
このメソッドは、指定されたBLOB
列の更新可能なOracleBlob
オブジェクトを戻します。
宣言
// C#
public OracleBlob GetOracleBlobForUpdate(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
更新可能なOracleBlob
オブジェクト
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
OracleCommand
のExecuteReader()
メソッドを起動する場合、OracleDataReader
によってフェッチされる全データは、特定のスナップショットから導出されます。このため、アクセッサ・メソッドを同じ列で呼び出すと、常に同じ値が戻されます。GetOracleBlobForUpdate()
メソッドではデータベース・ラウンドトリップを発生させ、現行のBLOB
データに対する参照を取得する一方、FOR
UPDATE
句を使用して行のロックも行います。つまり、元のスナップショットからは値を取得できないため、GetOracleBlob()
から取得したOracleBlob
には、GetOracleBlobForUpdate()
から取得したOracleBlob
とは異なる値を含めることができます。
このメソッドをコール後にBLOB
列はロックされるため、戻されたOracleBlob
オブジェクトを使用して、BLOB
を安全に更新できます。
このメソッドを内部で起動すると、WAIT
句を使用せずにSELECT..FOR UPDATE
文が実行されます。このため、その行に対してロックが取得されるまで、文は無期限に待機できます。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
例
次の例では、更新のためリーダーからOracleBlob
オブジェクトを取得し、OracleBlob
オブジェクトを更新して、トランザクションをコミットしています。
/* 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; using Oracle.DataAccess.Types; class GetOracleBlobForUpdateSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Get the ByteCodes for empno = 1 string cmdstr = "SELECT BYTECODES, EMPNO FROM EMPINFO where EMPNO = 1"; OracleCommand cmd = new OracleCommand(cmdstr, con); // Since we are going to update the OracleBlob object, we will //have to create a transaction OracleTransaction txn = con.BeginTransaction(); // Get the reader OracleDataReader reader = cmd.ExecuteReader(); // Declare the variables to retrieve the data in EmpInfo OracleBlob byteCodesBlob; // Read the first row reader.Read(); if (!reader.IsDBNull(0)) { byteCodesBlob = reader.GetOracleBlobForUpdate(0); // Close the reader reader.Close(); // Update the ByteCodes object byte[] addedBytes = new byte[2] {0, 0}; byteCodesBlob.Append(addedBytes, 0, addedBytes.Length); // Now commit the transaction txn.Commit(); Console.WriteLine("Blob Column successfully updated"); } else reader.Dispose(); // Close the connection con.Dispose(); } }
このメソッドはWAIT
句を使用して、指定されたBLOB
列の更新可能なOracleBlob
オブジェクトを戻します。
宣言
// C# public OracleBlob GetOracleBlobForUpdate(int index, int wait);
パラメータ
index
ゼロベースの列索引です。
wait
メソッドがロックを取得するまで待機する秒数
戻り値
更新可能なOracleBlob
オブジェクト
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
OracleCommand
のExecuteReader()
メソッドを起動する場合、OracleDataReader
によってフェッチされる全データは、特定のスナップショットから導出されます。このため、アクセッサ・メソッドを同じ列で呼び出すと、常に同じ値が戻されます。GetOracleBlobForUpdate()
メソッドではデータベース・ラウンドトリップを発生させ、現行のBLOB
データに対する参照を取得する一方、FOR
UPDATE
句を使用して行のロックも行います。つまり、元のスナップショットからは値を取得できないため、GetOracleBlob()
から取得したOracleBlob
には、GetOracleBlobForUpdate()
から取得したOracleBlob
とは異なる値を含めることができます。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドをコール後にBLOB
列はロックされるため、戻されたOracleBlob
オブジェクトを使用して、BLOB
を安全に更新できます。
このメソッドを内部で起動すると、行をロックするSELECT..FOR UPDATE
文が実行されます。
文には、wait
値に応じて、別のWAIT
句を追加できます。次のwait
値の場合は、次のとおりにします。
0
SELECT..FOR
UPDATE
文の文末に"NOWAIT
" が追加されている場合。ロックを取得済かどうかに関係なく、文はただちに実行されます。ロックが取得されていない場合は、例外がスローされます。
n
SELECT..FOR
UPDATE
文の文末に"WAIT
n
" が追加されている場合。文はロックを取得後ただちに実行されます。ロックがn
秒で取得できない場合は、このメソッド・コールに例外がスローされます。
「WAIT
n
」機能は、Oracle9i以降でのみ使用可能です。Oracle9iより前のバージョンの場合は、n
が暗黙的に-1
として処理され、SELECT..FOR
UPDATE
文の文末には何も追加されません。
-1
SELECT..FOR
UPDATE
の文末に何も追加されていない場合。文はロックが取得されるまで無期限に待機して実行されます。
例
GetOracleBlobForUpdate
メソッドは比較可能です。使用方法を示したコード例は、「例」を参照してください。
このメソッドは、指定されたCLOB列のOracleClobオブジェクトを戻します。
宣言
// C#
public OracleClob GetOracleClob(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleClob
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
GetOracleClobForUpdate
は、指定されたCLOB
列の更新可能なOracleClob
オブジェクトを戻します。
オーバーロード・リスト:
このメソッドは、指定されたCLOB
列の更新可能なOracleClob
オブジェクトを戻します。
GetOracleClobForUpdate(int, int)
このメソッドはWAIT
句を使用して、指定されたCLOB
列の更新可能なOracleClob
オブジェクトを戻します。
このメソッドは、指定されたCLOB
列の更新可能なOracleClob
オブジェクトを戻します。
宣言
// C#
public OracleClob GetOracleClobForUpdate(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
更新可能なOracleClob
。
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
OracleCommand
のExecuteReader()
メソッドを起動する場合、OracleDataReader
によってフェッチされる全データは、特定のスナップショットから導出されます。このため、アクセッサ・メソッドを同じ列で呼び出すと、常に同じ値が戻されます。GetOracleClobForUpdate()
メソッドではデータベース・ラウンドトリップを発生させ、現行のCLOB
データに対する参照を取得する一方、FOR
UPDATE
句を使用して行のロックも行います。つまり、元のスナップショットからは値を取得できないため、GetOracleClob()
から取得したOracleClob
には、GetOracleClobForUpdate()
から取得したOracleClob
とは異なる値を含めることができます。
このメソッドをコール後にCLOB
列はロックされるため、戻されたOracleClob
オブジェクトを使用して、CLOB
を安全に更新できます。
このメソッドを内部で起動すると、WAIT
句を使用せずにSELECT..FOR
UPDATE
文が実行されます。このため、その行に対してロックが取得されるまで、文は無期限に待機できます。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
例
次の例では、更新のためリーダーからOracleClob
オブジェクトを取得し、OracleClob
オブジェクトを更新して、トランザクションをコミットしています。
/* 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; using Oracle.DataAccess.Types; class GetOracleClobForUpdateSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Get the job description for empno = 1 string cmdStr = "SELECT JOBDESCRIPTION, EMPNO FROM EMPINFO where EMPNO = 1"; OracleCommand cmd = new OracleCommand(cmdStr, con); // Since we are going to update the OracleClob object, we will // have to create a transaction OracleTransaction txn = con.BeginTransaction(); // Get the reader OracleDataReader reader = cmd.ExecuteReader(); // Declare the variables to retrieve the data in EmpInfo OracleClob jobDescClob; // Read the first row reader.Read(); if (!reader.IsDBNull(0)) { jobDescClob = reader.GetOracleClobForUpdate(0); // Close the reader reader.Close(); // Update the job description Clob object char[] jobDesc = "-SALES".ToCharArray(); jobDescClob.Append(jobDesc, 0, jobDesc.Length); // Now commit the transaction txn.Commit(); Console.WriteLine("Clob Column successfully updated"); } else reader.Close(); // Close the connection con.Close(); } }
このメソッドはWAIT
句を使用して、指定されたCLOB
列の更新可能なOracleClob
オブジェクトを戻します。
宣言
// C# public OracleClob GetOracleClobForUpdate(int index, int wait);
パラメータ
index
ゼロベースの列索引です。
wait
メソッドがロックを取得するまで待機する秒数
戻り値
更新可能なOracleClob
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
OracleCommand
のExecuteReader()
メソッドを起動する場合、OracleDataReader
によってフェッチされる全データは、特定のスナップショットから導出されます。このため、アクセッサ・メソッドを同じ列で呼び出すと、常に同じ値が戻されます。GetOracleClobForUpdate()
メソッドではデータベース・ラウンドトリップを発生させ、現行のCLOB
データに対する参照を取得する一方、FOR
UPDATE
句を使用して行のロックも行います。つまり、元のスナップショットからは値を取得できないため、GetOracleClob()
から取得したOracleClob
には、GetOracleClobForUpdate()
から取得したOracleClob
とは異なる値を含めることができます。
このメソッドを内部で起動すると、行をロックするSELECT..FOR UPDATE
文が実行されます。
このメソッドをコール後にCLOB
列はロックされるため、戻されたOracleClob
オブジェクトを使用して、CLOB
を安全に更新できます。
文には、wait
値に応じて、別のWAIT
句を追加できます。次のwait
値の場合は、次のとおりにします。
0
SELECT..FOR UPDATE
文の文末に"NOWAIT
" が追加されている場合。ロックを取得済かどうかに関係なく、文はただちに実行されます。ロックが取得されていない場合は、例外がスローされます。
n
SELECT..FOR UPDATE
文の文末に"WAIT
n
" が追加されている場合。文はロックを取得後ただちに実行されます。ロックがn
秒で取得できない場合は、このメソッド・コールに例外がスローされます。
「WAIT
n
」機能は、Oracle9i以降でのみ使用可能です。Oracle9iより前のバージョンの場合は、n
が暗黙的に-1
として処理され、SELECT..FOR
UPDATE
文の文末には何も追加されません。
-1
SELECT..FOR UPDATE
の文末に何も追加されていない場合。文はロックが取得されるまで無期限に待機して実行されます。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
例
GetOracleClobForUpdateメソッドは比較可能です。使用方法を示したコード例は、「例」を参照してください。
このメソッドは、指定されたDATE列のOracleDate構造を戻します。
宣言
// C#
public OracleDate GetOracleDate(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleDate
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列のOracleDecimal
構造を戻します。
宣言
// C#
public OracleDecimal GetOracleDecimal(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleDecimal
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたINTERVAL
DAY
TO
SECOND
列のOracleIntervalDS
構造を戻します。
宣言
// C#
public OracleIntervalDS GetOracleIntervalDS(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleIntervalDS
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたINTERVAL
YEAR
TO
MONTH
列のOracleIntervalYM
構造を戻します。
宣言
// C#
public OracleIntervalYM GetOracleIntervalYM(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleIntervalYM
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたREF
列のOracleRef
オブジェクトを戻します。
宣言
// C#
public OracleRef GetOracleRef(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
指定された列のOracleRef
オブジェクト。
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read
メソッドが呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- アクセッサ・メソッドはこの列型に対して無効です。
このメソッドは、指定された列のOracleString
構造を戻します。
宣言
// C#
public OracleString GetOracleString(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleString
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
列がOracle REF
列である場合、データベースでREF
を表す16進数の文字列が戻されます。
このメソッドは、Oracle TimeStamp
列のOracleTimeStamp
構造を戻します。
宣言
// C#
public OracleTimeStamp GetOracleTimeStamp(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleTimeStamp
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
GetOracleTimeStamp
をOracle Type TimeStamp
とともに使用しています。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたOracle TimeStamp
WITH
LOCAL
TIME
ZONE
列のOracleTimeStampLTZ
構造を戻します。
宣言
// C#
public OracleTimeStampLTZ GetOracleTimeStampLTZ(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleTimeStampLTZ
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
GetOracleTimeStampLTZ
は、Oracle Type TimeStamp
を使用してLocal Time Zone列とともに使用されています。
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたOracle TimeStamp
WITH
TIME
ZONE
列のOracleTimeStampTZ
構造を戻します。
宣言
// C#
public OracleTimeStampTZ GetOracleTimeStampTZ(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleTimeStampTZ
値
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
Oracle Type TimeStamp
をLocal Time Zone列とともに使用
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたXMLType
列のOracleXmlType
オブジェクトを戻します。
宣言
// C#
public OracleXmlType GetOracleXmlType(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleXmlType
値
例外
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定された列値をODP.NETタイプとして戻します。
宣言
// C#
public object GetOracleValue(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
ODP.NETタイプとしての列の値です。
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
備考
列がOracleオブジェクトまたはOracleコレクションの列で、カスタム・タイプ・マッピングが存在する場合、カスタム・タイプが戻されます。
列がOracle REF
列である場合、OracleRef
が戻されます。
このメソッドでは、すべての列値をODP.NETタイプとして取得します。
宣言
// C#
public int GetOracleValues(object[] values);
パラメータ
values
ODP.NETタイプを列値として保持するオブジェクトの配列
戻り値
values
配列内のODP.NETタイプの数
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
備考
このメソッドでは、個別に各列の値を取り出すのではなく、すべての列値を取り出す方法を提供します。
取り出される列値の数は、values
配列の長さが最小の、結果セット内の列数です。
このメソッドは、指定された列名の0
ベースの序数(または索引)を戻します
宣言
// C#
public override int GetOrdinal(string name);
パラメータ
name
指定された列名
戻り値
列の索引
実装
IDataRecord
例外
InvalidOperationException
- リーダーがクローズされています。
IndexOutOfRangeException
- 列索引が無効です。
備考
指定された列を列名で特定するには、大/小文字を区別して検索します。これで特定できない場合は、大/小文字を区別せずに検索します。
このメソッドは、指定された列のプロバイダ固有のタイプを戻します。
宣言
// C#public override Type GetProviderSpecificFieldType(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
指定した列のプロバイダ固有のタイプ。これはOracle.DataAccess.Types
ネームスペースのメンバーです。
例外
IndexOutOfRangeException
- 列索引が無効です。
InvalidOperationException
- リーダーがクローズされているか、指定された列はUDTですがUDTに対する登録済カスタム・タイプ・マッピングが存在しません。
備考
GetProviderSpecficFieldType
は、OracleDataReader
上のGetProviderSpecificValue
アクセッサの呼出し後に、アプリケーションが取得する値に対応するタイプを戻します。たとえば、列が文字列である場合、このメソッドはOracleString
に対する.NETタイプ・オブジェクトを戻します。
属性がUDTである場合、このメソッドは次のいずれかを戻します。
列がOracleオブジェクトまたはOracleコレクションの列で、カスタム・タイプ・マッピングが存在する場合は、カスタム・タイプの.NETタイプ。
列がOracle REF
である場合は、OracleRef
の.NETタイプ。
このメソッドは、指定した序数の基礎となるプロバイダ固有の値を表すObjectを戻します。
宣言
// C#
public override object GetProviderSpecificValue (int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
基礎となるプロバイダ固有フィールド・タイプの代理であるObject
。
例外
IndexOutOfRangeException
- 列索引が無効です。
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
備考
列がOracleオブジェクトまたはコレクションの列で、カスタム・タイプ・マッピングが存在する場合、カスタム・タイプが戻されます。
列がOracle REF
列である場合、OracleRef
が戻されます。
このメソッドは、基礎となるプロバイダ固有値を表すオブジェクトの配列を戻します。
宣言
// C#
public override int GetProviderSpecificValues(object [ ] values);
パラメータ
values
オブジェクトの配列
戻り値
配列内のObject
インスタンスの数。
例外
InvalidOperationException
- リーダーがクローズされています。
このメソッドは、OracleDataReader
の列メタデータを記述するDataTable
を戻します。
宣言
// C# public override DataTable GetSchemaTable();
戻り値
結果セットのメタデータを含むDataTable
実装
IDataReader
例外
InvalidOperationException
- 接続がクローズされているか、またはリーダーがクローズされています。
備考
OracleDataReader.GetSchemaTable
メソッドは、SchemaTable
を戻します。
OracleDataReader
SchemaTable
は、OracleDataReader
の列メタデータを記述するDataTable
です。
ColumnSize
の値は、表定義のVARCHAR2
型、NVARCHAR2
型またはRAW
型の列の定義によって32Kまで表示されます。
SchemaTable
の列は、次に表示する順序になります。
表6-61 OracleDataReaderスキーマ表
名前 | ネーム・タイプ | 説明 |
---|---|---|
|
|
列の名前です。 |
|
|
|
|
|
列内の値として可能な最大長。
詳細は、「 |
|
|
列が数値のデータ型の場合の、列の最大精度。 この列には、Oracle |
|
|
列のスケール。 この列には、Oracle |
|
|
列値が一意かどうかを示します。 実表の2行にこの列の同じ値が含まれていない場合は、 次の条件が、この優先順位で適用される場合、
列に実表の重複した値を含めることができる場合、 デフォルトは 選択リストの実表の列の各出現に対して、このプロパティの値は同じです。 |
|
|
列がキー列かどうかを示します。 列が、行を一意に識別する行セット内の列のセットの1つである場合は、 この列セットは、優先度の低い順に次の1つから生成できます。
明示的に選択された |
|
|
列が |
|
|
列に別名が使用されている場合の、データベース内の列名。 |
|
|
列を含むデータベース内のスキーマ名。 |
|
|
列を含むデータベース内の表名またはビュー名。 |
|
|
共通言語のランタイム型にマップします。 |
|
|
列のデータベース列タイプ( |
|
|
|
|
|
列が別名の場合は |
|
|
Oracle9iより前のバージョンのデータベースに接続する場合は、この値は常に |
|
|
列が式の場合は |
|
|
列が非表示の場合は |
|
|
列が読取り専用の場合は |
|
|
列が |
|
|
UDTのタイプ名。 |
|
|
列がID列の場合は |
|
|
列の新しい行に固定増分で値が割り当てられる場合は ODP.NET管理対象ドライバでは使用できません |
|
|
ID列の値の生成方法を指定する ODP.NET管理対象ドライバでは使用できません |
例
この例では、リーダーからSchemaTable
を作成して使用します。
/* 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; using Oracle.DataAccess.Types; class GetSchemaTableSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); string cmdstr = "SELECT EMPNO,EMPNAME FROM EMPINFO where EMPNO = 1"; OracleCommand cmd = new OracleCommand(cmdstr, con); //get the reader OracleDataReader reader = cmd.ExecuteReader(); //get the schema table DataTable schemaTable = reader.GetSchemaTable(); //retrieve the first column info. DataRow row = schemaTable.Rows[0]; //print out the column info Console.WriteLine("Column name: " + row["COLUMNNAME"]); Console.WriteLine("Precision: " + row["NUMERICPRECISION"]); Console.WriteLine("Scale: " + row["NUMERICSCALE"]); reader.Close(); // Close the connection con.Close(); } }
このメソッドは、指定された列のstring
値を戻します。
宣言
// C#
public override string GetString(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のstring
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
メソッドを呼び出して、NULL値を確認してください。
列がOracle REF
列である場合、データベースでREF
を表す16進数の文字列が戻されます。
このメソッドは、指定されたINTERVAL
DAY
TO
SECOND
列のTimeSpan
値を戻します。
宣言
// C#
public TimeSpan GetTimeSpan(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のTimeSpan
値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドでは、列値を.NETタイプとして戻します。
宣言
// C#
public override object GetValue(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
.NETタイプとしての列の値
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られているか、またはOracleオブジェクトまたはOracleコレクション列に対して有効なカスタム・タイプ・マッピングが指定されていません。
IndexOutOfRangeException
- 列索引が無効です。
備考
列がOracleオブジェクトまたはOracleコレクションの列である場合、カスタム・タイプ・マッピングに対応する.NETカスタム・タイプが戻されます。
列がOracle REF
列である場合、データベースでREF
を表す.NET文字列として16進数が戻されます。
UDTがNULL
である場合、DBNull.Value
が戻されます
このメソッドでは、すべての列値を.NETタイプとして取得します。
宣言
// C#
public override int GetValues(object[ ] values);
パラメータ
values
.NETタイプを列値として保持するオブジェクトの配列
戻り値
values
配列のオブジェクト数
実装
IDataRecord
例外
InvalidOperationException
- 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
備考
このメソッドでは、個別に各列の値を取り出すのではなく、すべての列値を取り出す方法を提供します。
取り出される列値の数は、配列値の長さが最小の、結果セット内の列数です。
このメソッドでは、XMLType
列のコンテンツを.NET XmlTextReader
オブジェクトのインスタンスとして戻します。
宣言
// C#
public XmlReader GetXmlReader(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
.NET XmlTextReader
。
例外
InvalidCastException
- この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、列値がNULL
かどうかを示します。
宣言
// C#
public override bool IsDBNull(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列がNULL
値の場合はtrue
を戻し、それ以外の場合はfalse
を戻します。
実装
IDataRecord
例外
InvalidOperationException
- リーダーがクローズされているか、Read()
が呼び出されていないか、またはすべての行が読み取られています。
IndexOutOfRangeException
- 列索引が無効です。
備考
別のアクセッサ・メソッドを呼び出す前に、このメソッドを呼び出してNULL
値を確認してください。
例
OracleDataReader
クラスのコード例には、IsDBNull
メソッドが含まれています。「例」を参照してください。
このメソッドは、データ・リーダーを次の結果セットに拡張します。
宣言
// C# public override bool NextResult();
戻り値
別の結果セットが存在する場合はtrue
を戻し、それ以外の場合はfalse
を戻します。
実装
IDataReader
例外
InvalidOperationException
- 接続がクローズされているか、またはリーダーがクローズされています。
備考
NextResult
は、複数の結果セットを戻すストアド・プロシージャを実行した結果を読み取る場合に使用されます。
このメソッドでは、結果セットで現在の次の行を読み取ります。
宣言
// C# public override bool Read();
戻り値
別の行が存在する場合はtrue
を戻し、それ以外の場合はfalse
を戻します。
実装
IDataReader
例外
InvalidOperationException
- 接続がクローズされているか、またはリーダーがクローズされています。
備考
データ・リーダーの初期位置は、最初の行の前です。このため、最初の行をフェッチするにはRead
メソッドを呼び出す必要があります。読取りが完了したばかりの行が現在の行とみなされます。OracleDataReader
にそれ以上読み取る行がない場合は、false
が戻されます。
例
OracleDataReader
クラスのコード例には、Read
メソッドが含まれています。「例」を参照してください。