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.0, 4.5 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
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-53にリストします。
OracleDataReaderプロパティ
OracleDataReaderプロパティを、表6-54にリストします。
表6-54 OracleDataReaderプロパティ
| プロパティ | 説明 |
|---|---|
|
現在の行に対するネスティングの深さを示す値を取得します |
|
|
|
|
|
結果セット内の列数を取得します |
|
|
|
|
|
|
非表示の |
|
データ・リーダーがクローズされているかどうかを示します |
|
|
列値を取得します(オーバーロード) |
|
|
|
LOB列について |
|
|
|
|
SQL文の実行によって変更、挿入または削除された行数を取得します |
|
|
|
|
|
|
値を返すとき、 |
|
|
非表示ではない |
OracleDataReaderパブリック・メソッド
OracleDataReaderパブリック・メソッドを、表6-55にリストします。
表6-55 OracleDataReaderパブリック・メソッド
| パブリック・メソッド | 説明 |
|---|---|
|
|
|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
|
|
|
サポート対象外 |
|
|
指定された列のバイト値を戻します |
|
|
列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を移入します |
|
|
サポート対象外 |
|
|
列の指定されたオフセット(文字)から、最高の場合最大文字数を使用して、指定された文字配列を移入します |
|
|
|
サポート対象外 |
|
指定された列のODP.NETタイプ名を戻します |
|
|
指定された列の |
|
|
指定された |
|
|
指定された |
|
|
|
コレクションから反復するのに使用できる |
|
指定された列の |
|
|
指定された |
|
|
サポート対象外 |
|
|
|
|
|
指定された |
|
|
指定された |
|
|
指定された |
|
|
|
|
|
指定された列名を戻します |
|
|
指定された |
|
|
指定された列の |
|
|
指定された |
|
|
指定された |
|
|
指定された |
|
|
指定された |
|
|
指定された |
|
|
指定された |
|
|
指定された |
|
|
指定された |
|
|
|
指定された |
|
指定された列の |
|
|
Oracle |
|
|
指定されたOracle |
|
|
指定されたOracle |
|
|
指定された |
|
|
指定された列値をODP.NETタイプとして戻します |
|
|
すべての列値をODP.NETタイプとして取得します |
|
|
指定された列名の |
|
|
|
指定された列のプロバイダ固有のタイプを戻します |
|
|
指定した序数の基礎となるプロバイダ固有の値を表すオブジェクトを戻します。 |
|
|
基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します。 |
|
|
|
|
指定された列の文字列値を戻します |
|
|
指定された |
|
|
|
|
|
列値を.NETタイプとして戻します |
|
|
すべての列値を.NETタイプとして取得します |
|
|
|
|
|
列値がNULLかどうかを示します |
|
|
結果の読取り中にデータ・リーダーを次の結果セットに拡張します |
|
|
結果セットで次の行を読み取ります |
|
|
|
|
OracleDataReaderプロパティを、表6-57にリストします。
表6-57 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-58にリストします。
表6-58 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-59 OracleDataReader SchemaTable
| 名前 | ネーム・タイプ | 説明 |
|---|---|---|
|
|
|
列の名前です。 |
|
|
|
|
|
|
|
列内の値として可能な最大長。
詳細は、「 |
|
|
|
列が数値のデータ型の場合の、列の最大精度。 この列には、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メソッドが含まれています。「例」を参照してください。