OracleDataReader
オブジェクトは、順方向専用および読取り専用のメモリー内結果セットを表します。
DataSet
と異なり、OracleDataReader
は接続されたままであり、1度に1行ずつフェッチされます。
次の項に、関連情報が記載されています。
クラスの継承
System.Object
System.MarshalByRefObject
System.Data.Common.DataReader
System.Data.Common.DbDataReader
(ADO.NET 2.0のみ)
Oracle.DataAccess.Client.OracleDataReader
宣言
// ADO.NET 2.0: C# public sealed class OracleDataReader : DbDataReader, IEnumerable, IDataReader, IDisposable, IDataRecord
// ADO.NET 1.x: C#
public sealed class OracleDataReader : MarshalByRefObject, IEnumerable,
IDataReader, IDisposable, IDataRecord
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
OracleDataReader
インスタンスは、OracleCommand
オブジェクトのExecuteReader
メソッドへのコールにより構成されます。DataReader
のクローズ後または処理後にアクセスできるプロパティは、IsClosed
およびRecordsAffected
のみです。
例
次の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(); } }
要件
ネームスペース: Oracle.DataAccess.Client
アセンブリ: Oracle.DataAccess.dll
Microsoft .NET Frameworkバージョン: 1.xまたは2.0
OracleDataReader
メンバーは、次の表にリストされています。
OracleDataReader静的メソッド
OracleDataReader
静的メソッドのリストを、表5-38に示します。
OracleDataReaderプロパティ
OracleDataReader
プロパティのリストを、表5-39に示します。
表5-39 OracleDataReaderプロパティ
プロパティ | 説明 |
---|---|
現在の行に対するネスティングの深さを示す値を取得します |
|
|
|
結果セット内の列数を取得します |
|
|
|
|
ADO.NET 2.0準拠のODP.NETでのみサポート |
データ・リーダーがクローズされているかどうかを示します |
|
列値を取得します(オーバーロード) |
|
|
LOB列について |
|
|
SQL文の実行によって変更、挿入または削除された行数を取得します |
|
|
ADO.NET 2.0準拠のODP.NETでのみサポート |
OracleDataReaderパブリック・メソッド
OracleDataReader
パブリック・メソッドのリストを、表5-40に示します。
表5-40 OracleDataReaderパブリック・メソッド
パブリック・メソッド | 説明 |
---|---|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
|
サポート対象外 |
|
指定された列のバイト値を戻します |
|
列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を移入します |
|
サポート対象外 |
|
列の指定されたオフセット(文字)から、最高の場合最大文字数を使用して、指定された文字配列を移入します |
|
|
サポート対象外 |
指定された列のODP.NETタイプ名を戻します |
|
指定された列の |
|
指定された |
|
指定された |
|
|
コレクションの反復に使用できる |
指定された列の |
|
指定された |
|
サポート対象外 |
|
|
|
指定された |
|
指定された |
|
指定された |
|
|
System. |
指定された列名を戻します |
|
指定された |
|
指定された列の |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された列の |
|
Oracle |
|
指定されたOracle |
|
指定されたOracle |
|
指定された |
|
指定された列値をODP.NETタイプとして戻します |
|
すべての列値をODP.NETタイプとして取得します |
|
指定された列名の |
|
|
基礎となるプロバイダ固有のフィールド型を表す ADO.NET 2.0準拠のODP.NETでのみサポート |
|
指定された序数について、基礎となるプロバイダ固有の値を表すオブジェクトを戻します ADO.NET 2.0準拠のODP.NETでのみサポート |
|
基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します ADO.NET 2.0準拠のODP.NETでのみサポート |
|
|
指定された列の文字列値を戻します |
|
指定された |
|
|
|
列値を.NETタイプとして戻します |
|
すべての列値を.NETタイプとして取得します |
|
|
|
列値がNULLかどうかを示します |
|
結果の読取り中にデータ・リーダーを次の結果セットに拡張します |
|
結果セットで次の行を読み取ります |
|
|
|
OracleDataReader
静的メソッドのリストを、表5-41に示します。
OracleDataReader
プロパティのリストを、表5-42に示します。
表5-42 OracleDataReaderプロパティ
プロパティ | 説明 |
---|---|
現在の行に対するネスティングの深さを示す値を取得します |
|
|
|
結果セット内の列数を取得します |
|
|
|
|
ADO.NET 2.0準拠のODP.NETでのみサポート |
データ・リーダーがクローズされているかどうかを示します |
|
列値を取得します(オーバーロード) |
|
|
LOB列について |
|
|
SQL文の実行によって変更、挿入または削除された行数を取得します |
|
|
ADO.NET 2.0準拠のODP.NETでのみサポート |
このプロパティでは、現在の行に対するネスティングの深さを示す値を取得します。
宣言
// ADO.NET 2.0: C# public override int Depth {get;}
// ADO.NET 1.x: C# public int Depth {get;}
プロパティ値
現在の行に対するネスティングの深さ
実装
IDataReader
例外
InvalidOperationException
: リーダーがクローズされています。
備考
デフォルト= 0
Oracleではネスティングがサポートされていないため、このプロパティは常にゼロを戻します。
このプロパティは、OracleDataReader
の内部キャッシュのサイズを指定します。
宣言
// C# public long FetchSize {get; set;}
プロパティ値
OracleDataReader
が内部キャッシュに使用するメモリーの量(バイト表示)を指定するlong
例外
ArgumentException
: 指定したFetchSize
値は無効です。
備考
デフォルト = OracleCommand
のFetchSize
プロパティ値。
FetchSize
プロパティは、結果セットを戻すコマンドを実行して作成したOracleDataReader
により、継承されます。OracleDataReader
オブジェクト上のFetchSize
プロパティにより、データベース・ラウンドトリップごとの内部キャッシュにフェッチされるデータ量が決定されます。
このプロパティは、結果セット内の列数を戻します。
宣言
// ADO.NET 2.0: C# public override int FieldCount {get;}
// ADO.NET 1.x: C#
public int FieldCount {get;}
プロパティ値
列が存在する場合は結果セット内の列数、それ以外は0
実装
IDataRecord
例外
InvalidOperationException
: リーダーがクローズされています。
備考
デフォルト= 0
このプロパティには、結果セットを戻さない問合せに対する0の値が含まれています。
このプロパティは、OracleDataReader
に1つ以上の行があるかどうかを示します。
宣言
// ADO.NET 2.0: C# public override bool HasRows {get;}
// ADO.NET 1.x: C#
public 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
の非表示フィールドの数を取得します。
ADO.NET 2.0準拠のODP.NETでのみサポート
宣言
// C# public int HiddenFieldcount { get; }
プロパティ値
OracleDataReader
の非表示フィールドの数
例外
InvalidOperationException
: リーダーがクローズされています。
備考
OracleDataReader.FieldCount
およびOracleDataReader.VisibleFieldCount
が表示フィールド数を戻します。
このプロパティは、データ・リーダーがクローズされているかどうかを示します。
宣言
// ADO.NET 2.0: C# public override bool IsClosed {get;}
// ADO.NET 1.x: C#
public bool IsClosed {get;}
プロパティ値
OracleDataReader
がクローズの状態にある場合はtrue
を戻し、それ以外の場合はfalse
を戻します。
実装
IDataReader
備考
デフォルト = true
OracleDataReader
のクローズ後にアクセス可能なプロパティは、IsClosed
およびRecordsAffected
のみです。
このプロパティは、列の値を.NETデータ型で取得します。
オーバーロード・リスト:
このプロパティでは、列索引で指定された列の.NET Value
を取得します。
このプロパティでは、列名で指定された列の.NET Value
を取得します。
このプロパティでは、列索引で指定された列の.NET Value
を取得します。
宣言
// ADO.NET 2.0: C# public override object this[int index] {get;}
// ADO.NET 1.x: C#
public object this[int index] {get;}
パラメータ
index
ゼロベースの列の索引
プロパティ値
指定された列の.NET値
実装
IDataRecord
備考
デフォルト = 適用不可
C#では、このプロパティでこのクラスの索引付けをします。
このプロパティでは、列名で指定された列の.NET Value
を取得します。
宣言
// ADO.NET 2.0: C#
public override object this[string columnName] {get;}
// ADO.NET 1.x: C# public object this[string columnName] {get;}
パラメータ
columnName
列の名前です。
プロパティ値
指定された列の.NET Value
実装
IDataRecord
備考
デフォルト = 適用不可
指定された列を列名で特定するには、大/小文字を区別して検索します。これで特定できない場合は、大/小文字を区別せずに検索します。
C#では、このプロパティでこのクラスの索引付けをします。
このプロパティは、OracleDataReader
がLOB列に対して最初にフェッチする量を指定します。
宣言
// C# public int InitialLOBFetchSize {get;}
プロパティ値
取り出すチャンクのサイズです。
例外
InvalidOperationException
: リーダーがクローズされています。
備考
Oracle Database 10gリリース2(10.2)以上では、InitialLOBFetchSize
に対してサポートされている最大値は2GBです。
Oracle Database 10gリリース2(10.2)より前のリリースの場合、InitialLOBFetchSize
に対してサポートされている最大値は32KBです。
デフォルトは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
の非表示でないフィールドの数を取得します。
ADO.NET 2.0準拠のODP.NETでのみサポート
宣言
// C# public override int VisibleFieldcount { get; }
プロパティ値
非表示でないフィールドの数
例外
InvalidOperationException
: リーダーがクローズされています。
備考
アプリケーションでOracleCommand
オブジェクトのAddRowid
プロパティをtrue
に設定している場合は、アプリケーションからRowId
にアクセスできますが、これは表示フィールドではありません。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
パブリック・メソッドのリストを、表5-43に示します。
表5-43 OracleDataReaderパブリック・メソッド
パブリック・メソッド | 説明 |
---|---|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
|
サポート対象外 |
|
指定された列のバイト値を戻します |
|
列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を移入します |
|
サポート対象外 |
|
列の指定されたオフセット(文字)から、最高の場合最大文字数を使用して、指定された文字配列を移入します |
|
|
サポート対象外 |
指定された列のODP.NETタイプ名を戻します |
|
指定された列の |
|
指定された |
|
指定された |
|
|
コレクションの反復に使用できる |
指定された列の |
|
指定された |
|
サポート対象外 |
|
|
|
指定された |
|
指定された |
|
指定された |
|
|
System. |
指定された列名を戻します |
|
指定された |
|
指定された列の |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された |
|
指定された列の |
|
Oracle |
|
指定されたOracle |
|
指定されたOracle |
|
指定された |
|
指定された列値をODP.NETタイプとして戻します |
|
すべての列値をODP.NETタイプとして取得します |
|
指定された列名の |
|
|
基礎となるプロバイダ固有のフィールド型を表す ADO.NET 2.0準拠のODP.NETでのみサポート |
|
指定された序数について、基礎となるプロバイダ固有の値を表すオブジェクトを戻します ADO.NET 2.0準拠のODP.NETでのみサポート |
|
基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します ADO.NET 2.0準拠のODP.NETでのみサポート |
|
|
指定された列の文字列値を戻します |
|
指定された |
|
|
|
列値を.NETタイプとして戻します |
|
すべての列値を.NETタイプとして取得します |
|
|
|
列値がNULLかどうかを示します |
|
結果の読取り中にデータ・リーダーを次の結果セットに拡張します |
|
結果セットで次の行を読み取ります |
|
|
|
このメソッドはOracleDataReader
をクローズします。
宣言
// ADO.NET 2.0: C# public override void Close();
// ADO.NET 1.x: C#
public void Close();
実装
IDataReader
備考
Close
メソッドは、OracleDataReader
に関連付けられているすべてのリソースを解除します。
例
OracleDataReader
クラスのコード例には、Close
メソッドが含まれています。OracleDataReader
概要の「例」を参照してください。
このメソッドでは、オブジェクトにより割り当てられたリソースまたはメモリーを解除します。
宣言
// C# public void Dispose();
実装
IDisposable
備考
Dispose
メソッドでは、OracleDataReader
もクローズします。
このメソッドは、サポートされていません。
宣言
// ADO.NET 2.0: C#
public override bool GetBoolean(int index);
// ADO.NET 1.x: C# public bool GetBoolean(int index);
パラメータ
index
ゼロベースの列索引です。
実装
IDataRecord
例外
NotSupportedException
: このプロパティは、サポートされていません。
このメソッドは、指定された列のバイト値を戻します。
宣言
// ADO.NET 2.0: C#
public override byte GetByte(int index);
// ADO.NET 1.x: C# public byte GetByte(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
バイト表示の列の値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を作成します。
宣言
// ADO.NET 2.0: C# public override long GetBytes(int index, long fieldOffset, byte[] buffer, int bufferOffset, int length);
// ADO.NET 1.x: C#
public 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
値を確認してください。
このメソッドは、サポートされていません。
宣言
// ADO.NET 2.0: C#
public override long GetChar(int index);
// ADO.NET 1.x: C#
public long GetChar(int index);
パラメータ
index
ゼロベースの列索引
実装
IDataRecord
例外
NotSupportedException
: このプロパティは、サポートされていません。
このメソッドは、列の指定されたオフセット(文字表示)から、最高の場合最大文字数を使用して、指定された文字配列を作成します。
宣言
// ADO.NET 2.0: C# public override long GetChars(int index, long fieldOffset, char[] buffer, int bufferOffset, int length);
// ADO.NET 1.x: C# public 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タイプ名を戻します。
宣言
// ADO.NET 2.0: C#
public override string GetDataTypeName(int index);
// ADO.NET 1.x: C# public string GetDataTypeName(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のODP.NETタイプの名前
実装
IDataRecord
例外
InvalidOperationException
: リーダーがクローズされています。
IndexOutOfRangeException
: 列索引が無効です。
このメソッドは、指定された列のDateTime
値を戻します。
宣言
// ADO.NET 2.0: C#
public override DateTime GetDateTime(int index);
// ADO.NET 1.x: C# public DateTime GetDateTime(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のDateTime
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列のdecimal
値を戻します。
宣言
// ADO.NET 2.0: C#
public override decimal GetDecimal(int index);
// ADO.NET 1.x: C# public decimal GetDecimal(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のdecimal
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列またはBINARY_DOUBLE
列のdouble
値を戻します。
宣言
// ADO.NET 2.0: C#
public override double GetDouble(int index);
// ADO.NET 1.x: C# public double GetDouble(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のdouble
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
Oracle Database 10gより、GetDouble
はBINARY_DOUBLE
列からのデータ検索をサポートしています。
このメソッドは、コレクション(レコード・セット)の反復に使用できるIEnumerator
を戻します。
宣言
// ADO.NET 2.0: C# public override IEnumerator GetEnumerator();
// ADO.NET 1.x: C#
IEnumerator IEnumerable.GetEnumerator();
戻り値
コレクション(レコード・セット)の反復に使用できるIEnumerator
例外
InvalidOperationException
: リーダーがクローズされています。
このメソッドは、指定された列のtype
を戻します。
宣言
// ADO.NET 2.0: C#
public override Type GetFieldType(int index);
// ADO.NET 1.x: C# public Type GetFieldType(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のデフォルト.NETタイプのtype
実装
IDataRecord
例外
InvalidOperationException
: リーダーがクローズされています。
IndexOutOfRangeException
: 列索引が無効です。
備考
GetFieldType
は、アプリケーションがOracleDataReader
に対してGetValue
アクセッサまたはItem
プロパティを起動した後に取得する値に対応する型を戻します。たとえば、列が文字列の場合、このメソッドは.NET文字列に対する.NETタイプのオブジェクトを戻します。
このメソッドは、指定されたNUMBER
列またはBINARY_FLOAT
列のfloat
値を戻します。
宣言
// ADO.NET 2.0: C#
public override float GetFloat(int index);
// ADO.NET 1.x: C# public float GetFloat(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のfloat
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
Oracle Database 10gより、GetFloat
はBINARY_FLOAT
列からのデータ検索をサポートしています。
このメソッドは、サポートされていません。
宣言
// ADO.NET 2.0: C#
public override Guid GetGuid(int index);
// ADO.NET 1.x: C# public Guid GetGuid(int index);
パラメータ
index
ゼロベースの列索引です。
実装
IDataRecord
例外
NotSupportedException
: このプロパティは、サポートされていません。
このメソッドは、指定されたNUMBER
列のInt16
値を戻します。
注意: short はInt16 と等価です。 |
宣言
// ADO.NET 2.0: C#
public override short GetInt16(int index);
// ADO.NET 1.x: C# public short GetInt16(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のInt16
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列のInt32
値を戻します。
注意: int はInt32 と等価です。 |
宣言
// ADO.NET 2.0: C#
public override int GetInt32(int index);
// ADO.NET 1.x: C# public int GetInt32(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のInt32
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定されたNUMBER
列のInt64
値を戻します。
注意: long はInt64 と等価です。 |
宣言
// ADO.NET 2.0: C#
public override long GetInt64(int index);
// ADO.NET 1.x: C# public long GetInt64(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のInt64
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドは、指定された列の列名を戻します。
宣言
// ADO.NET 2.0: C#
public override string GetName(int index);
// ADO.NET 1.x: C# public 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
値を確認してください。
このメソッドは、指定された列のOracleString
構造を戻します。文字列はUnicode文字列として記憶されています。
宣言
// C#
public OracleString GetOracleString(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のOracleString
値
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
GetOracleString
は、次のOracle列タイプで使用されています。
CHAR
CLOB
LONG
NCLOB
NCHAR
Nested Table
NVARCHAR2
Object
ROWID
UROWID
VARCHAR2
VARRAY
XMLType
このメソッドは、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
値を確認してください。
要件
このプロパティは、Oracle9iリリース2(9.2)以上でのみ使用できます。
このメソッドは、指定された列値をODP.NETタイプとして戻します。
宣言
// C#
public object GetOracleValue(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
ODP.NETタイプとしての列の値です。
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
このメソッドでは、すべての列値をODP.NETタイプとして取得します。
宣言
// C#
public int GetOracleValues(object[] values);
パラメータ
values
ODP.NETタイプを列値として保持するオブジェクトの配列
戻り値
values
配列内のODP.NETタイプの数
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
備考
このメソッドでは、個別に各列の値を取り出すのではなく、すべての列値を取り出す方法を提供します。
取り出される列値の数は、values
配列の長さが最小の、結果セット内の列数です。
このメソッドは、指定された列名の0
ベースの序数(または索引)を戻します
宣言
// ADO.NET 2.0: C#
public override int GetOrdinal(string name);
// ADO.NET 1.x: C# public int GetOrdinal(string name);
パラメータ
name
指定された列名
戻り値
列の索引
実装
IDataRecord
例外
InvalidOperationException
: リーダーがクローズされています。
IndexOutOfRangeException
: 列索引が無効です。
備考
指定された列を列名で特定するには、大/小文字を区別して検索します。これで特定できない場合は、大/小文字を区別せずに検索します。
このメソッドは、基礎となるプロバイダ固有のフィールド型を表すObject
を戻します。
宣言
// ADO.NET 2.0: C#public override Type GetProviderSpecificFieldType(int ordinal);
パラメータ
ordinal
ゼロベースの列序数です。
戻り値
基礎となるプロバイダ固有のフィールド型を表すSystem.Type
例外
IndexOutOfRangeException
: 列索引が無効です。
InvalidOperationException
: リーダーがクローズされています。
備考
戻り型は、Oracle.DataAccess.Types
ネームスペースのメンバーです。
このメソッドは、指定された序数について、基礎となるプロバイダ固有の値を表すオブジェクトを戻します。
宣言
// ADO.NET 2.0: C#
public override object GetProviderSpecificValue (int ordinal);
パラメータ
ordinal
ゼロベースの列序数です。
戻り値
基礎となるプロバイダ固有のフィールド型を表すObject
例外
IndexOutOfRangeException
: 列索引が無効です。
InvalidOperationException
: リーダーがクローズされています。
このメソッドは、基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します。
宣言
// ADO.NET 2.0: C#
public override int GetProviderSpecificValues( object [ ] values);
パラメータ
values
オブジェクトの配列
戻り値
配列内のObject
の数
例外
InvalidOperationException
: リーダーがクローズされています。
このメソッドは、OracleDataReader
の列メタデータを記述するDataTable
を戻します。
宣言
// ADO.NET 2.0: C# public override DataTable GetSchemaTable();
// ADO.NET 1.x: C#
public DataTable GetSchemaTable();
戻り値
結果セットのメタデータを含むDataTable
実装
IDataReader
例外
InvalidOperationException
: 接続がクローズされているか、またはリーダーがクローズされています。
備考
OracleDataReader.GetSchemaTable
メソッドがSchemaTable
を戻します。
OracleDataReader
SchemaTable
は、OracleDataReader
の列メタデータを記述するDataTable
です。
SchemaTable
の列は、次に表示する順序になります。
表5-44 OracleDataReader SchemaTable
名前 | ネーム・タイプ | 説明 |
---|---|---|
|
|
列の名前です。 |
|
|
|
|
|
列内の値として可能な最大長。
詳細は、 |
|
|
列が数値のデータ型の場合の、列の最大精度。 この列には、Oracle |
|
|
列のスケール。 この列には、Oracle |
|
|
列値が一意かどうかを示します。 実表の2行にこの列の同じ値が含まれていない場合は、 次のうちの1つが適用される場合、
列に実表の重複した値を含めることができる場合、 デフォルトは 選択リストの実表の列の各出現に対して、このプロパティの値は同じです。 |
|
|
列がキー列かどうかを示します。 列が、行を一意に識別する行セット内の列のセットの1つである場合は、 この列セットは、優先度の低い順に次の1つから生成できます。
明示的に選択された |
|
|
列が |
|
|
列に別名が使用されている場合の、データベース内の列名。 |
|
|
列を含むデータベース内のスキーマ名。 |
|
|
列を含むデータベース内の表名またはビュー名。 |
|
|
共通言語のランタイム型にマップします。 |
|
|
列のデータベース列タイプ( |
|
|
|
|
|
列が別名の場合は |
|
|
Oracle9iより前のバージョンのデータベースに接続する場合は、この値は常に |
|
|
列が式の場合は |
|
|
列が非表示の場合は |
|
|
列が読取り専用の場合は |
|
|
列が |
例
この例では、リーダーから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
値を戻します。
宣言
// ADO.NET 2.0: C#
public override string GetString(int index);
// ADO.NET 1.x: C# public string GetString(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のstring
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
メソッドを呼び出して、NULL値を確認してください。
このメソッドは、指定されたINTERVAL
DAY
TO
SECOND
列のTimeSpan
値を戻します。
宣言
// C#
public TimeSpan GetTimeSpan(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列のTimeSpan
値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
InvalidCastException
: この列型のアクセッサ・メソッドが無効か、列値がNULL
です。
備考
このメソッドを呼び出す前にIsDBNull
を呼び出して、NULL
値を確認してください。
このメソッドでは、列値を.NETタイプとして戻します。
宣言
// ADO.NET 2.0: C#
public override object GetValue(int index);
// ADO.NET 1.x: C# public object GetValue(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
.NETタイプとしての列の値
実装
IDataRecord
例外
InvalidOperationException
: 接続またはリーダーがクローズされているか、Read()
が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
備考
このメソッドがNUMBER
列に対して起動される場合、.NETタイプは列の精度およびスケールに応じて戻されます。たとえば、列がNUMBER
(4,0)
として定義されている場合、その列の値はSystem.Int16
として取得されます。精度およびスケールが、その列に存在し得るすべての値を.NETタイプで表せないものである場合、値はSystem.Decimal
として戻されます(可能な場合)。値をSystem.Decimal
によって表すことができない場合、例外が発生します。たとえば、列がNUMBER
(20,10)
として定義される場合、この列の値はSystem.Decimal
として取得されます。
このメソッドでは、すべての列値を.NETタイプとして取得します。
宣言
// ADO.NET 2.0: C#
public override int GetValues(object[ ] values);
// ADO.NET 1.x: C# public 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
かどうかを示します。
宣言
// ADO.NET 2.0: C#
public override bool IsDBNull(int index);
// ADO.NET 1.x: C# public bool IsDBNull(int index);
パラメータ
index
ゼロベースの列索引です。
戻り値
列がNULL
値の場合はtrue
を戻し、それ以外の場合はfalse
を戻します。
実装
IDataRecord
例外
InvalidOperationException
: リーダーがクローズされているか、Read()
が呼び出されていないか、またはすべての行が読み取られています。
IndexOutOfRangeException
: 列索引が無効です。
備考
別のアクセッサ・メソッドを呼び出す前に、このメソッドを呼び出してNULL
値を確認してください。
例
OracleDataReader
クラスのコード例には、IsDBNull
メソッドが含まれています。「例」を参照してください。
このメソッドは、データ・リーダーを次の結果セットに拡張します。
宣言
// ADO.NET 2.0: C# public override bool NextResult();
// ADO.NET 1.x: C#
public bool NextResult();
戻り値
別の結果セットが存在する場合はtrue
を戻し、それ以外の場合はfalse
を戻します。
実装
IDataReader
例外
InvalidOperationException
: 接続がクローズされているか、またはリーダーがクローズされています。
備考
NextResult
は、複数の結果セットを戻すストアド・プロシージャを実行した結果を読み取る場合に使用されます。
このメソッドでは、結果セットで現在の次の行を読み取ります。
宣言
// ADO.NET 2.0: C# public override bool Read();
// ADO.NET 1.x: C#
public bool Read();
戻り値
別の行が存在する場合はtrue
を戻し、それ以外の場合はfalse
を戻します。
実装
IDataReader
例外
InvalidOperationException
: 接続がクローズされているか、またはリーダーがクローズされています。
備考
データ・リーダーの初期位置は、最初の行の前です。このため、最初の行をフェッチするにはRead
メソッドを呼び出す必要があります。読取りが完了したばかりの行が現在の行とみなされます。OracleDataReader
にそれ以上読み取る行がない場合は、false
が戻されます。
例
OracleDataReader
クラスのコード例には、Read
メソッドが含まれています。「例」を参照してください。