ヘッダーをスキップ
Oracle Data Provider for .NET開発者ガイド
11g リリース1(11.1)
E05791-01
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

OracleDataReaderクラス

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静的メソッド

OracleDataReader静的メソッドのリストを、表5-38に示します。

表5-38 OracleDataReader静的メソッド

メソッド 説明

Equals

System.Objectからの継承(オーバーロード)


OracleDataReaderプロパティ

OracleDataReaderプロパティのリストを、表5-39に示します。

表5-39 OracleDataReaderプロパティ

プロパティ 説明

Depth

現在の行に対するネスティングの深さを示す値を取得します

FetchSize

OracleDataReaderの内部キャッシュのサイズを指定します

FieldCount

結果セット内の列数を取得します

HasRows


OracleDataReaderに1つ以上の行があるかどうかを示します

HiddenFieldCount


OracleDataReaderの非表示フィールドの数を取得します

ADO.NET 2.0準拠のODP.NETでのみサポート

IsClosed

データ・リーダーがクローズされているかどうかを示します

Item

列値を取得します(オーバーロード)

InitialLOBFetchSize


LOB列についてOracleDataReaderが最初にフェッチする量を指定します

InitialLONGFetchSize

OracleDataReaderLONGおよびLONG RAW列に対して最初にフェッチする量を指定します

RecordsAffected

SQL文の実行によって変更、挿入または削除された行数を取得します

VisibleFieldCount


OracleDataReaderの非表示でないフィールドの数を取得します

ADO.NET 2.0準拠のODP.NETでのみサポート


OracleDataReaderパブリック・メソッド

OracleDataReaderパブリック・メソッドのリストを、表5-40に示します。

表5-40 OracleDataReaderパブリック・メソッド

パブリック・メソッド 説明

Close

OracleDataReaderをクローズします

CreateObjRef

System.MarshalByRefObjectからの継承

Dispose

オブジェクトにより割り当てられたリソースまたはメモリーを解除します

Equals

System.Objectからの継承(オーバーロード)

GetBoolean

サポート対象外

GetByte

指定された列のバイト値を戻します

GetBytes

列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を移入します

GetChar

サポート対象外

GetChars

列の指定されたオフセット(文字)から、最高の場合最大文字数を使用して、指定された文字配列を移入します

GetData

サポート対象外

GetDataTypeName

指定された列のODP.NETタイプ名を戻します

GetDateTime

指定された列のDateTime値を戻します

GetDecimal

指定されたNUMBER列のdecimal値を戻します

GetDouble

指定されたNUMBER列またはBINARY_DOUBLE列のdouble値を戻します

GetEnumerator


コレクションの反復に使用できるIEnumeratorを戻します

GetFieldType

指定された列のTypeを戻します

GetFloat

指定されたNUMBER列またはBINARY_FLOAT列のfloat値を戻します

GetGuid

サポート対象外

GetHashCode

System.Objectからの継承

GetInt16

指定されたNUMBER列のInt16値を戻します

GetInt32

指定されたNUMBER列のInt32値を戻します

GetInt64

指定されたNUMBER列のInt64値を戻します

GetLifetimeService

System.MarshalByRefObjectにより継承

GetName

指定された列名を戻します

GetOracleBFile

指定されたBFILE列のOracleBFileオブジェクトを戻します

GetOracleBinary

指定された列のOracleBinary構造を戻します

GetOracleBlob

指定されたBLOB列のOracleBlobオブジェクトを戻します

GetOracleBlobForUpdate

指定されたBLOB列の更新可能なOracleBlobオブジェクトを戻します

GetOracleClob

指定されたCLOB列のOracleClobオブジェクトを戻します

GetOracleClobForUpdate

指定されたCLOB列の更新可能なOracleClobオブジェクトを戻します

GetOracleDate

指定されたDATE列のOracleDate構造を戻します

GetOracleDecimal

指定されたNUMBER列のOracleDecimal構造を戻します

GetOracleIntervalDS

指定されたINTERVAL DAY TO SECOND列のOracleIntervalDS構造を戻します

GetOracleIntervalYM

指定されたINTERVAL YEAR TO MONTH列のOracleIntervalYM構造を戻します

GetOracleString

指定された列のOracleString構造を戻します

GetOracleTimeStamp

Oracle TimeStamp列のOracleTimeStamp構造を戻します

GetOracleTimeStampLTZ

指定されたOracle TimeStamp WITH LOCAL TIME ZONE列のOracleTimeStampLTZ構造を戻します

GetOracleTimeStampTZ

指定されたOracle TimeStamp WITH TIME ZONE列のOracleTimeStampTZ構造を戻します

GetOracleXmlType

指定されたXMLType列のOracleXmlTypeオブジェクトを戻します

GetOracleValue

指定された列値をODP.NETタイプとして戻します

GetOracleValues

すべての列値をODP.NETタイプとして取得します

GetOrdinal

指定された列名の0ベースの序数(または索引)を戻します

GetProviderSpecificFieldType


基礎となるプロバイダ固有のフィールド型を表すObjectを戻します

ADO.NET 2.0準拠のODP.NETでのみサポート

GetProviderSpecificValue


指定された序数について、基礎となるプロバイダ固有の値を表すオブジェクトを戻します

ADO.NET 2.0準拠のODP.NETでのみサポート

GetProviderSpecificValues


基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します

ADO.NET 2.0準拠のODP.NETでのみサポート

GetSchemaTable

OracleDataReaderの列メタデータを記述するDataTableを戻します

GetString

指定された列の文字列値を戻します

GetTimeSpan

指定されたINTERVAL DAY TO SECOND列のTimeSpan値を戻します

GetType

System.Objectクラスからの継承

GetValue

列値を.NETタイプとして戻します

GetValues

すべての列値を.NETタイプとして取得します

GetXmlReader

XMLType列の値を.NET XmlTextReaderのインスタンスとして戻します

IsDBNull

列値がNULLかどうかを示します

NextResult

結果の読取り中にデータ・リーダーを次の結果セットに拡張します

Read

結果セットで次の行を読み取ります

ToString

System.Objectからの継承



OracleDataReader静的メソッド

OracleDataReader静的メソッドのリストを、表5-41に示します。

表5-41 OracleDataReader静的メソッド

メソッド 説明

Equals

System.Objectからの継承(オーバーロード)



OracleDataReaderプロパティ

OracleDataReaderプロパティのリストを、表5-42に示します。

表5-42 OracleDataReaderプロパティ

プロパティ 説明

Depth

現在の行に対するネスティングの深さを示す値を取得します

FetchSize

OracleDataReaderの内部キャッシュのサイズを指定します

FieldCount

結果セット内の列数を取得します

HasRows


OracleDataReaderに1つ以上の行があるかどうかを示します

HiddenFieldCount


OracleDataReaderの非表示フィールドの数を取得します

ADO.NET 2.0準拠のODP.NETでのみサポート

IsClosed

データ・リーダーがクローズされているかどうかを示します

Item

列値を取得します(オーバーロード)

InitialLOBFetchSize


LOB列についてOracleDataReaderが最初にフェッチする量を指定します

InitialLONGFetchSize

OracleDataReaderLONGおよびLONG RAW列に対して最初にフェッチする量を指定します

RecordsAffected

SQL文の実行によって変更、挿入または削除された行数を取得します

VisibleFieldCount


OracleDataReaderの非表示でないフィールドの数を取得します

ADO.NET 2.0準拠のODP.NETでのみサポート


Depth

このプロパティでは、現在の行に対するネスティングの深さを示す値を取得します。

宣言

// ADO.NET 2.0: C#
public override int Depth {get;}

// ADO.NET 1.x: C#
public int Depth {get;}

プロパティ値

現在の行に対するネスティングの深さ

実装

IDataReader

例外

InvalidOperationException: リーダーがクローズされています。

備考

デフォルト= 0

Oracleではネスティングがサポートされていないため、このプロパティは常にゼロを戻します。

FetchSize

このプロパティは、OracleDataReaderの内部キャッシュのサイズを指定します。

宣言

// C#
public long FetchSize {get; set;}

プロパティ値

OracleDataReaderが内部キャッシュに使用するメモリーの量(バイト表示)を指定するlong

例外

ArgumentException: 指定したFetchSize値は無効です。

備考

デフォルト = OracleCommandFetchSizeプロパティ値。

FetchSizeプロパティは、結果セットを戻すコマンドを実行して作成したOracleDataReaderにより、継承されます。OracleDataReaderオブジェクト上のFetchSizeプロパティにより、データベース・ラウンドトリップごとの内部キャッシュにフェッチされるデータ量が決定されます。

FieldCount

このプロパティは、結果セット内の列数を戻します。

宣言

// ADO.NET 2.0: C#
public override int FieldCount {get;}

// ADO.NET 1.x: C#
public int FieldCount {get;}

プロパティ値

列が存在する場合は結果セット内の列数、それ以外は0

実装

IDataRecord

例外

InvalidOperationException: リーダーがクローズされています。

備考

デフォルト= 0

このプロパティには、結果セットを戻さない問合せに対する0の値が含まれています。

HasRows

このプロパティは、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();
  }
}


参照:


HiddenFieldCount

このプロパティは、OracleDataReaderの非表示フィールドの数を取得します。

ADO.NET 2.0準拠のODP.NETでのみサポート

宣言

// C#
public int HiddenFieldcount { get; }

プロパティ値

OracleDataReaderの非表示フィールドの数

例外

InvalidOperationException: リーダーがクローズされています。

備考

OracleDataReader.FieldCountおよびOracleDataReader.VisibleFieldCountが表示フィールド数を戻します。

IsClosed

このプロパティは、データ・リーダーがクローズされているかどうかを示します。

宣言

// 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のみです。

Item

このプロパティは、列の値を.NETデータ型で取得します。

オーバーロード・リスト:

Item [index]

このプロパティでは、列索引で指定された列の.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;}

パラメータ

プロパティ値

指定された列の.NET値

実装

IDataRecord

備考

デフォルト = 適用不可

C#では、このプロパティでこのクラスの索引付けをします。

Item [string]

このプロパティでは、列名で指定された列の.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;}

パラメータ

プロパティ値

指定された列の.NET Value

実装

IDataRecord

備考

デフォルト = 適用不可

指定された列を列名で特定するには、大/小文字を区別して検索します。これで特定できない場合は、大/小文字を区別せずに検索します。

C#では、このプロパティでこのクラスの索引付けをします。

InitialLOBFetchSize

このプロパティは、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であり、これからこの値が継承されます。

InitialLONGFetchSize

このプロパティでは、OracleDataReaderLONGおよびLONG RAW列に対して最初にフェッチする量を指定します。

宣言

// C#
public long InitialLONGFetchSize {get;}

プロパティ値

取り出すチャンクのサイズです。デフォルトは0です。

例外

InvalidOperationException: リーダーがクローズされています。

備考

InitialLONGFetchSizeに対してサポートされている最大値は32767です。このプロパティがそれより大きい値に設定されている場合は、プロバイダによって32767にリセットされます。

デフォルトはOracleCommand.InitialLONGFetchSizeであり、これからこの値が継承されます。

このプロパティは、OracleDataReaderに対して読取りのみです。

RecordsAffected

このプロパティでは、SQL文の実行によって変更、挿入または削除された行数を取得します。

宣言

// C#
public int RecordsAffected {get;}

プロパティ値

SQL文の実行により影響を受けた行数

実装

IDataReader

備考

デフォルト= 0

-1SELECT文に戻されます。

OracleDataReaderのクローズ後にアクセス可能なプロパティは、IsClosedおよびRecordsAffectedのみです。

VisibleFieldCount

このプロパティは、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パブリック・メソッド

OracleDataReaderパブリック・メソッドのリストを、表5-43に示します。

表5-43 OracleDataReaderパブリック・メソッド

パブリック・メソッド 説明

Close

OracleDataReaderをクローズします

CreateObjRef

System.MarshalByRefObjectからの継承

Dispose

オブジェクトにより割り当てられたリソースまたはメモリーを解除します

Equals

System.Objectからの継承(オーバーロード)

GetBoolean

サポート対象外

GetByte

指定された列のバイト値を戻します

GetBytes

列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を移入します

GetChar

サポート対象外

GetChars

列の指定されたオフセット(文字)から、最高の場合最大文字数を使用して、指定された文字配列を移入します

GetData

サポート対象外

GetDataTypeName

指定された列のODP.NETタイプ名を戻します

GetDateTime

指定された列のDateTime値を戻します

GetDecimal

指定されたNUMBER列のdecimal値を戻します

GetDouble

指定されたNUMBER列またはBINARY_DOUBLE列のdouble値を戻します

GetEnumerator


コレクションの反復に使用できるIEnumeratorを戻します

GetFieldType

指定された列のTypeを戻します

GetFloat

指定されたNUMBER列またはBINARY_FLOAT列のfloat値を戻します

GetGuid

サポート対象外

GetHashCode

System.Objectからの継承

GetInt16

指定されたNUMBER列のInt16値を戻します

GetInt32

指定されたNUMBER列のInt32値を戻します

GetInt64

指定されたNUMBER列のInt64値を戻します

GetLifetimeService

System.MarshalByRefObjectにより継承

GetName

指定された列名を戻します

GetOracleBFile

指定されたBFILE列のOracleBFileオブジェクトを戻します

GetOracleBinary

指定された列のOracleBinary構造を戻します

GetOracleBlob

指定されたBLOB列のOracleBlobオブジェクトを戻します

GetOracleBlobForUpdate

指定されたBLOB列の更新可能なOracleBlobオブジェクトを戻します

GetOracleClob

指定されたCLOB列のOracleClobオブジェクトを戻します

GetOracleClobForUpdate

指定されたCLOB列の更新可能なOracleClobオブジェクトを戻します

GetOracleDate

指定されたDATE列のOracleDate構造を戻します

GetOracleDecimal

指定されたNUMBER列のOracleDecimal構造を戻します

GetOracleIntervalDS

指定されたINTERVAL DAY TO SECOND列のOracleIntervalDS構造を戻します

GetOracleIntervalYM

指定されたINTERVAL YEAR TO MONTH列のOracleIntervalYM構造を戻します

GetOracleString

指定された列のOracleString構造を戻します

GetOracleTimeStamp

Oracle TimeStamp列のOracleTimeStamp構造を戻します

GetOracleTimeStampLTZ

指定されたOracle TimeStamp WITH LOCAL TIME ZONE列のOracleTimeStampLTZ構造を戻します

GetOracleTimeStampTZ

指定されたOracle TimeStamp WITH TIME ZONE列のOracleTimeStampTZ構造を戻します

GetOracleXmlType

指定されたXMLType列のOracleXmlTypeオブジェクトを戻します

GetOracleValue

指定された列値をODP.NETタイプとして戻します

GetOracleValues

すべての列値をODP.NETタイプとして取得します

GetOrdinal

指定された列名の0ベースの序数(または索引)を戻します

GetProviderSpecificFieldType


基礎となるプロバイダ固有のフィールド型を表すObjectを戻します

ADO.NET 2.0準拠のODP.NETでのみサポート

GetProviderSpecificValue


指定された序数について、基礎となるプロバイダ固有の値を表すオブジェクトを戻します

ADO.NET 2.0準拠のODP.NETでのみサポート

GetProviderSpecificValues


基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します

ADO.NET 2.0準拠のODP.NETでのみサポート

GetSchemaTable

OracleDataReaderの列メタデータを記述するDataTableを戻します

GetString

指定された列の文字列値を戻します

GetTimeSpan

指定されたINTERVAL DAY TO SECOND列のTimeSpan値を戻します

GetType

System.Objectクラスからの継承

GetValue

列値を.NETタイプとして戻します

GetValues

すべての列値を.NETタイプとして取得します

GetXmlReader

XMLType列の値を.NET XmlTextReaderのインスタンスとして戻します

IsDBNull

列値がNULLかどうかを示します

NextResult

結果の読取り中にデータ・リーダーを次の結果セットに拡張します

Read

結果セットで次の行を読み取ります

ToString

System.Objectからの継承


Close

このメソッドはOracleDataReaderをクローズします。

宣言

// ADO.NET 2.0: C#
public override void Close();

// ADO.NET 1.x: C#
public void Close();

実装

IDataReader

備考

Closeメソッドは、OracleDataReaderに関連付けられているすべてのリソースを解除します。

OracleDataReaderクラスのコード例には、Closeメソッドが含まれています。OracleDataReader概要の「例」を参照してください。

Dispose

このメソッドでは、オブジェクトにより割り当てられたリソースまたはメモリーを解除します。

宣言

// C#
public void Dispose();

実装

IDisposable

備考

Disposeメソッドでは、OracleDataReaderもクローズします。

GetBoolean

このメソッドは、サポートされていません。

宣言

// ADO.NET 2.0: C#
public override bool GetBoolean(int index);

// ADO.NET 1.x: C#
public bool GetBoolean(int index);

パラメータ

実装

IDataRecord

例外

NotSupportedException: このプロパティは、サポートされていません。

GetByte

このメソッドは、指定された列のバイト値を戻します。

宣言

// ADO.NET 2.0: C#
public override byte GetByte(int index);

// ADO.NET 1.x: C#
public byte GetByte(int index);

パラメータ

戻り値

バイト表示の列の値

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetBytes

このメソッドは、列の指定されたオフセット(バイト表示)から、最高の場合最大バイト数を使用して、指定されたバイト配列を作成します。

宣言

// 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);

パラメータ

戻り値

読取りが終了したバイト数

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドは、バッファに読み取られたバイト数を戻します。メソッドが同じ列に対して前に呼び出されている場合は、バイト数は実際のフィールド長より短くなる場合があります。

NULL参照がバッファに渡された場合、バイト表示のフィールド長が戻されます。

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetChar

このメソッドは、サポートされていません。

宣言

// ADO.NET 2.0: C#
public override long GetChar(int index);

// ADO.NET 1.x: C#
public long GetChar(int index);

パラメータ

実装

IDataRecord

例外

NotSupportedException: このプロパティは、サポートされていません。

GetChars

このメソッドは、列の指定されたオフセット(文字表示)から、最高の場合最大文字数を使用して、指定された文字配列を作成します。

宣言

// 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);

パラメータ

戻り値

読取りが終了した文字数

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドは、バッファに読み取られた文字数を戻します。メソッドが同じ列に対して前に呼び出されている場合は、文字数は実際のフィールド長より短くなる場合があります。

NULL参照がバッファに渡された場合、文字表示のフィールド長が戻されます。

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetDataTypeName

このメソッドは、指定された列のODP.NETタイプ名を戻します。

宣言

// ADO.NET 2.0: C#
public override string GetDataTypeName(int index);

// ADO.NET 1.x: C#
public string GetDataTypeName(int index);

パラメータ

戻り値

列のODP.NETタイプの名前

実装

IDataRecord

例外

InvalidOperationException: リーダーがクローズされています。

IndexOutOfRangeException: 列索引が無効です。

GetDateTime

このメソッドは、指定された列のDateTime値を戻します。

宣言

// ADO.NET 2.0: C#
public override DateTime GetDateTime(int index);

// ADO.NET 1.x: C#
public DateTime GetDateTime(int index);

パラメータ

戻り値

列のDateTime

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetDecimal

このメソッドは、指定されたNUMBER列のdecimal値を戻します。

宣言

// ADO.NET 2.0: C#
public override decimal GetDecimal(int index);

// ADO.NET 1.x: C#
public decimal GetDecimal(int index);

パラメータ

戻り値

列のdecimal

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetDouble

このメソッドは、指定された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);

パラメータ

戻り値

列のdouble

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

Oracle Database 10gより、GetDoubleBINARY_DOUBLE列からのデータ検索をサポートしています。

GetEnumerator

このメソッドは、コレクション(レコード・セット)の反復に使用できるIEnumeratorを戻します。

宣言

// ADO.NET 2.0: C#
public override IEnumerator GetEnumerator();

// ADO.NET 1.x: C#
IEnumerator IEnumerable.GetEnumerator();

戻り値

コレクション(レコード・セット)の反復に使用できるIEnumerator

例外

InvalidOperationException: リーダーがクローズされています。

GetFieldType

このメソッドは、指定された列のtypeを戻します。

宣言

// ADO.NET 2.0: C#
public override Type GetFieldType(int index);

// ADO.NET 1.x: C#
public Type GetFieldType(int index);

パラメータ

戻り値

列のデフォルト.NETタイプのtype

実装

IDataRecord

例外

InvalidOperationException: リーダーがクローズされています。

IndexOutOfRangeException: 列索引が無効です。

備考

GetFieldTypeは、アプリケーションがOracleDataReaderに対してGetValueアクセッサまたはItemプロパティを起動した後に取得する値に対応する型を戻します。たとえば、列が文字列の場合、このメソッドは.NET文字列に対する.NETタイプのオブジェクトを戻します。

GetFloat

このメソッドは、指定された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);

パラメータ

戻り値

列のfloat

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

Oracle Database 10gより、GetFloatBINARY_FLOAT列からのデータ検索をサポートしています。

GetGuid

このメソッドは、サポートされていません。

宣言

// ADO.NET 2.0: C#
public override Guid GetGuid(int index);

// ADO.NET 1.x: C#
public Guid GetGuid(int index);

パラメータ

実装

IDataRecord

例外

NotSupportedException: このプロパティは、サポートされていません。

GetInt16

このメソッドは、指定されたNUMBER列のInt16値を戻します。


注意:

shortInt16と等価です。

宣言

// ADO.NET 2.0: C#
public override short GetInt16(int index);

// ADO.NET 1.x: C#
public short GetInt16(int index);

パラメータ

戻り値

列のInt16

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetInt32

このメソッドは、指定されたNUMBER列のInt32値を戻します。


注意:

intInt32と等価です。

宣言

// ADO.NET 2.0: C#
public override int GetInt32(int index);

// ADO.NET 1.x: C#
public int GetInt32(int index);

パラメータ

戻り値

列のInt32

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetInt64

このメソッドは、指定されたNUMBER列のInt64値を戻します。


注意:

longInt64と等価です。

宣言

// ADO.NET 2.0: C#
public override long GetInt64(int index);

// ADO.NET 1.x: C#
public long GetInt64(int index);

パラメータ

戻り値

列のInt64

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetName

このメソッドは、指定された列の列名を戻します。

宣言

// ADO.NET 2.0: C#
public override string GetName(int index);

// ADO.NET 1.x: C#
public string GetName(int index);

パラメータ

戻り値

列の名前です。

実装

IDataRecord

例外

InvalidOperationException: リーダーがクローズされています。

IndexOutOfRangeException: 列索引が無効です。

GetOracleBFile

このメソッドは、指定されたBFILE列のOracleBFileオブジェクトを戻します。

宣言

// C#
public OracleBFile GetOracleBFile(int index);

パラメータ

戻り値

列のOracleBFile

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleBinary

このメソッドは、指定された列のOracleBinary構造を戻します。

宣言

// C#
public OracleBinary GetOracleBinary(int index);

パラメータ

戻り値

列のOracleBinary

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleBinaryは、次のOracleタイプで使用されています。

GetOracleBlob

このメソッドは、指定されたBLOB列のOracleBlobオブジェクトを戻します。

宣言

// C#
public OracleBlob GetOracleBlob(int index);

パラメータ

戻り値

列のOracleBlob値です。

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleBlobForUpdate

GetOracleBlobForUpdateは、指定されたBLOB列の更新可能なOracleBlobオブジェクトを戻します。

オーバーロード・リスト:

GetOracleBlobForUpdate(int)

このメソッドは、指定されたBLOB列の更新可能なOracleBlobオブジェクトを戻します。

宣言

// C#
public OracleBlob GetOracleBlobForUpdate(int index);

パラメータ

戻り値

更新可能なOracleBlobオブジェクト

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

OracleCommandExecuteReader()メソッドを起動する場合、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();
  }
}

GetOracleBlobForUpdate(int, int)

このメソッドはWAIT句を使用して、指定されたBLOB列の更新可能なOracleBlobオブジェクトを戻します。

宣言

// C#
public OracleBlob GetOracleBlobForUpdate(int index, int wait);

パラメータ

戻り値

更新可能なOracleBlobオブジェクト

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

OracleCommandExecuteReader()メソッドを起動する場合、OracleDataReaderによってフェッチされる全データは、特定のスナップショットから導出されます。このため、アクセッサ・メソッドを同じ列で呼び出すと、常に同じ値が戻されます。GetOracleBlobForUpdate()メソッドではデータベース・ラウンドトリップを発生させ、現行のBLOBデータに対する参照を取得する一方、FOR UPDATE句を使用して行のロックも行います。つまり、元のスナップショットからは値を取得できないため、GetOracleBlob()から取得したOracleBlobには、GetOracleBlobForUpdate()から取得したOracleBlobとは異なる値を含めることができます。

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

このメソッドをコール後にBLOB列はロックされるため、戻されたOracleBlobオブジェクトを使用して、BLOBを安全に更新できます。

このメソッドを内部で起動すると、行をロックするSELECT..FOR UPDATE文が実行されます。

文には、wait値に応じて、別のWAIT句を追加できます。次のwait値の場合は、次のとおりにします。

GetOracleBlobForUpdateメソッドは比較可能です。使用方法を示したコード例は、「例」を参照してください。

GetOracleClob

このメソッドは、指定されたCLOB列のOracleClobオブジェクトを戻します。

宣言

// C#
public OracleClob GetOracleClob(int index);

パラメータ

戻り値

列のOracleClob

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleClobForUpdate

GetOracleClobForUpdateは、指定されたCLOB列の更新可能なOracleClobオブジェクトを戻します。

オーバーロード・リスト:

GetOracleClobForUpdate(int)

このメソッドは、指定されたCLOB列の更新可能なOracleClobオブジェクトを戻します。

宣言

// C#
public OracleClob GetOracleClobForUpdate(int index);

パラメータ

戻り値

更新可能なOracleClob

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

OracleCommandExecuteReader()メソッドを起動する場合、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();
  }
}

GetOracleClobForUpdate(int, int)

このメソッドはWAIT句を使用して、指定されたCLOB列の更新可能なOracleClobオブジェクトを戻します。

宣言

// C#
public OracleClob GetOracleClobForUpdate(int index, int wait);

パラメータ

戻り値

更新可能なOracleClob

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

OracleCommandExecuteReader()メソッドを起動する場合、OracleDataReaderによってフェッチされる全データは、特定のスナップショットから導出されます。このため、アクセッサ・メソッドを同じ列で呼び出すと、常に同じ値が戻されます。GetOracleClobForUpdate()メソッドではデータベース・ラウンドトリップを発生させ、現行のCLOBデータに対する参照を取得する一方、FOR UPDATE句を使用して行のロックも行います。つまり、元のスナップショットからは値を取得できないため、GetOracleClob()から取得したOracleClobには、GetOracleClobForUpdate()から取得したOracleClobとは異なる値を含めることができます。

このメソッドを内部で起動すると、行をロックするSELECT..FOR UPDATE文が実行されます。

このメソッドをコール後にCLOB列はロックされるため、戻されたOracleClobオブジェクトを使用して、CLOBを安全に更新できます。

文には、wait値に応じて、別のWAIT句を追加できます。次のwait値の場合は、次のとおりにします。

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleClobForUpdateメソッドは比較可能です。使用方法を示したコード例は、「例」を参照してください。

GetOracleDate

このメソッドは、指定されたDATE列のOracleDate構造を戻します。

宣言

// C#
public OracleDate GetOracleDate(int index);

パラメータ

戻り値

列のOracleDate

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleDecimal

このメソッドは、指定されたNUMBER列のOracleDecimal構造を戻します。

宣言

// C#
public OracleDecimal GetOracleDecimal(int index);

パラメータ

戻り値

列のOracleDecimal

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleIntervalDS

このメソッドは、指定されたINTERVAL DAY TO SECOND列のOracleIntervalDS構造を戻します。

宣言

// C#
public OracleIntervalDS GetOracleIntervalDS(int index);

パラメータ

戻り値

列のOracleIntervalDS

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleIntervalYM

このメソッドは、指定されたINTERVAL YEAR TO MONTH列のOracleIntervalYM構造を戻します。

宣言

// C#
public OracleIntervalYM GetOracleIntervalYM(int index);

パラメータ

戻り値

列のOracleIntervalYM

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleString

このメソッドは、指定された列のOracleString構造を戻します。文字列はUnicode文字列として記憶されています。

宣言

// C#
public OracleString GetOracleString(int index);

パラメータ

戻り値

列のOracleString

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleStringは、次のOracle列タイプで使用されています。

GetOracleTimeStamp

このメソッドは、Oracle TimeStamp列のOracleTimeStamp構造を戻します。

宣言

// C#
public OracleTimeStamp GetOracleTimeStamp(int index);

パラメータ

戻り値

列のOracleTimeStamp

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

GetOracleTimeStampをOracle Type TimeStampとともに使用しています。

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleTimeStampLTZ

このメソッドは、指定されたOracle TimeStamp WITH LOCAL TIME ZONE列のOracleTimeStampLTZ構造を戻します。

宣言

// C#
public OracleTimeStampLTZ GetOracleTimeStampLTZ(int index);

パラメータ

戻り値

列のOracleTimeStampLTZ

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

GetOracleTimeStampLTZは、Oracle Type TimeStampを使用してLocal Time Zone列とともに使用されています。

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleTimeStampTZ

このメソッドは、指定されたOracle TimeStamp WITH TIME ZONE列のOracleTimeStampTZ構造を戻します。

宣言

// C#
public OracleTimeStampTZ GetOracleTimeStampTZ(int index);

パラメータ

戻り値

列のOracleTimeStampTZ

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

Oracle Type TimeStampをLocal Time Zone列とともに使用

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetOracleXmlType

このメソッドは、指定されたXMLType列のOracleXmlTypeオブジェクトを戻します。

宣言

// C#
public OracleXmlType GetOracleXmlType(int index);

パラメータ

戻り値

列のOracleXmlType

例外

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

要件

このプロパティは、Oracle9iリリース2(9.2)以上でのみ使用できます。

GetOracleValue

このメソッドは、指定された列値をODP.NETタイプとして戻します。

宣言

// C#
public object GetOracleValue(int index);

パラメータ

戻り値

ODP.NETタイプとしての列の値です。

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

GetOracleValues

このメソッドでは、すべての列値をODP.NETタイプとして取得します。

宣言

// C#
public int GetOracleValues(object[] values);

パラメータ

戻り値

values配列内のODP.NETタイプの数

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

備考

このメソッドでは、個別に各列の値を取り出すのではなく、すべての列値を取り出す方法を提供します。

取り出される列値の数は、values配列の長さが最小の、結果セット内の列数です。

GetOrdinal

このメソッドは、指定された列名の0ベースの序数(または索引)を戻します

宣言

// ADO.NET 2.0: C#
public override int GetOrdinal(string name);

// ADO.NET 1.x: C#
public int GetOrdinal(string name);

パラメータ

戻り値

列の索引

実装

IDataRecord

例外

InvalidOperationException: リーダーがクローズされています。

IndexOutOfRangeException: 列索引が無効です。

備考

指定された列を列名で特定するには、大/小文字を区別して検索します。これで特定できない場合は、大/小文字を区別せずに検索します。

GetProviderSpecificFieldType

このメソッドは、基礎となるプロバイダ固有のフィールド型を表すObjectを戻します。

宣言

// ADO.NET 2.0: C#public override Type GetProviderSpecificFieldType(int ordinal);

パラメータ

戻り値

基礎となるプロバイダ固有のフィールド型を表すSystem.Type

例外

IndexOutOfRangeException: 列索引が無効です。

InvalidOperationException: リーダーがクローズされています。

備考

戻り型は、Oracle.DataAccess.Typesネームスペースのメンバーです。

GetProviderSpecificValue

このメソッドは、指定された序数について、基礎となるプロバイダ固有の値を表すオブジェクトを戻します。

宣言

// ADO.NET 2.0: C#
public override object GetProviderSpecificValue (int ordinal);

パラメータ

ordinal

ゼロベースの列序数です。

戻り値

基礎となるプロバイダ固有のフィールド型を表すObject

例外

IndexOutOfRangeException: 列索引が無効です。

InvalidOperationException: リーダーがクローズされています。

GetProviderSpecificValues

このメソッドは、基礎となるプロバイダ固有の値を表すオブジェクトの配列を戻します。

宣言

// ADO.NET 2.0: C#
public override int GetProviderSpecificValues( object [ ] values);

パラメータ

戻り値

配列内のObjectの数

例外

InvalidOperationException: リーダーがクローズされています。

GetSchemaTable

このメソッドは、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 SchemaTableは、OracleDataReaderの列メタデータを記述するDataTableです。

SchemaTableの列は、次に表示する順序になります。

表5-44 OracleDataReader SchemaTable

名前 ネーム・タイプ 説明

ColumnName

System.String

列の名前です。

ColumnOrdinal

System.Int32

0ベースの列の序数。

ColumnSize

System.Int64

列内の値として可能な最大長。ColumnSize値は次のようにして決定されます:

  • CHARタイプおよびVARCHAR2タイプ

    バイト表示 - IsByteSemanticブール値がtrueの場合

    文字表示 - IsByteSemanticブール値がfalseの場合

  • その他すべてのタイプ

    バイト表示

詳細は、「IsByteSemantic」を参照してください。

NumericPrecision

System.Int16

列が数値のデータ型の場合の、列の最大精度。

この列には、Oracle NUMBER、Oracle INTERVAL YEAR TO MONTHおよびOracle INTERVAL DAY TO SECOND 列に対する有効な値が含まれています。その他すべての列については、値はnullです。

NumericScale

System.Int16

列のスケール。

この列には、Oracle NUMBER、Oracle INTERVAL DAY TO SECONDおよびOracle TIMESTAMP列に対する有効な値が含まれています。その他すべての列については、値はnullです。

IsUnique

System.Boolean

列値が一意かどうかを示します。

実表の2行にこの列の同じ値が含まれていない場合は、true。ここでは、実表はBaseTableNameで戻された表です。

次のうちの1つが適用される場合、IsUniquetrueであることが保証されます。

  • 列が単独でキーを構成している

  • この列のみに適用される一意制約または一意索引、および列に対して定義されたNOT NULL制約がある

  • 列が明示的に選択されたROWIDである

列に実表の重複した値を含めることができる場合、IsUniqueはfalse。

デフォルトはfalseです。

選択リストの実表の列の各出現に対して、このプロパティの値は同じです。

IsKey

System.Boolean

列がキー列かどうかを示します。

列が、行を一意に識別する行セット内の列のセットの1つである場合は、truetrueに設定されたIsKeyを持つ列のセットは行セットの行を一意に識別する必要があります。この列のセットが最小の列セットである必要はありません。

この列セットは、優先度の低い順に次の1つから生成できます。

  • 実表の主キー

  • 次の条件付きの、任意の一意制約または一意索引。複合一意制約または複合一意索引の場合、NOT NULL制約は列または列のすべてに対して定義する必要があります。

  • 次の条件付きの、任意の複合一意制約または複合一意索引。NULL制約は列の少なくとも1つ(すべてではない)に対して定義する必要があります。

明示的に選択されたROWID。列が行を一意に識別する必要がない場合は、falseです。選択リストの実表の列の各出現に対して、このプロパティの値は同じです。

IsRowID

System.Boolean

列がROWIDの場合はtrue、それ以外の場合はfalse

BaseColumnName

System.String

列に別名が使用されている場合の、データベース内の列名。

BaseSchemaName

System.String

列を含むデータベース内のスキーマ名。

BaseTableName

System.String

列を含むデータベース内の表名またはビュー名。

DataType

System.RuntimeType

共通言語のランタイム型にマップします。

ProviderType

Oracle.DataAccess. Client.OracleDbType

列のデータベース列タイプ(OracleDbType)。

AllowDBNull

System.Boolean

null値が許可されている場合はtrue、それ以外の場合はfalse

IsAliased

System.Boolean

列が別名の場合はtrue、それ以外の場合はfalse

IsByteSemantic

System.Boolean

IsByteSemanticの場合は次のとおりです。

  • ColumnSize値にバイト・セマンティクスが使用されている場合はtrue

  • ColumnSizeにキャラクタ・セマンティクスが使用されている場合はfalse

Oracle9iより前のバージョンのデータベースに接続する場合は、この値は常にtrueです。

IsExpression

System.Boolean

列が式の場合はtrue、それ以外の場合はfalse

IsHidden

System.Boolean

列が非表示の場合はtrue、それ以外の場合はfalse

IsReadOnly

System.Boolean

列が読取り専用の場合はtrue、それ以外の場合はfalse

IsLong

System.Boolean

列がLONGLONG RAWBLOBCLOBまたはBFILEの場合はtrue、それ以外の場合はfalse


この例では、リーダーから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();
  }
}

GetString

このメソッドは、指定された列のstring値を戻します。

宣言

// ADO.NET 2.0: C#
public override string GetString(int index);

// ADO.NET 1.x: C#
public string GetString(int index);

パラメータ

戻り値

列のstring

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullメソッドを呼び出して、NULL値を確認してください。

GetTimeSpan

このメソッドは、指定されたINTERVAL DAY TO SECOND列のTimeSpan値を戻します。

宣言

// C#
public TimeSpan GetTimeSpan(int index);

パラメータ

戻り値

列のTimeSpan

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

GetValue

このメソッドでは、列値を.NETタイプとして戻します。

宣言

// ADO.NET 2.0: C#
public override object GetValue(int index);

// ADO.NET 1.x: C#
public object GetValue(int index);

パラメータ

戻り値

.NETタイプとしての列の値

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

備考

このメソッドがNUMBER列に対して起動される場合、.NETタイプは列の精度およびスケールに応じて戻されます。たとえば、列がNUMBER(4,0)として定義されている場合、その列の値はSystem.Int16として取得されます。精度およびスケールが、その列に存在し得るすべての値を.NETタイプで表せないものである場合、値はSystem.Decimalとして戻されます(可能な場合)。値をSystem.Decimalによって表すことができない場合、例外が発生します。たとえば、列がNUMBER (20,10)として定義される場合、この列の値はSystem.Decimalとして取得されます。

GetValues

このメソッドでは、すべての列値を.NETタイプとして取得します。

宣言

// ADO.NET 2.0: C#
public override int GetValues(object[ ] values);

// ADO.NET 1.x: C#
public int GetValues(object[ ] values);

パラメータ

戻り値

values配列のオブジェクト数

実装

IDataRecord

例外

InvalidOperationException: 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。

備考

このメソッドでは、個別に各列の値を取り出すのではなく、すべての列値を取り出す方法を提供します。

取り出される列値の数は、配列値の長さが最小の、結果セット内の列数です。

GetXmlReader

このメソッドでは、XMLType列のコンテンツを.NET XmlTextReaderオブジェクトのインスタンスとして戻します。

宣言

// C#
public XmlReader GetXmlReader(int index);

パラメータ

戻り値

.NET XmlTextReader

例外

InvalidCastException: この列型のアクセッサ・メソッドが無効か、列値がNULLです。

備考

このメソッドを呼び出す前にIsDBNullを呼び出して、NULL値を確認してください。

IsDBNull

このメソッドは、列値がNULLかどうかを示します。

宣言

// ADO.NET 2.0: C#
public override bool IsDBNull(int index);

// ADO.NET 1.x: C#
public bool IsDBNull(int index);

パラメータ

戻り値

列がNULL値の場合はtrueを戻し、それ以外の場合はfalseを戻します。

実装

IDataRecord

例外

InvalidOperationException: リーダーがクローズされているか、Read()が呼び出されていないか、またはすべての行が読み取られています。

IndexOutOfRangeException: 列索引が無効です。

備考

別のアクセッサ・メソッドを呼び出す前に、このメソッドを呼び出してNULL値を確認してください。

OracleDataReaderクラスのコード例には、IsDBNullメソッドが含まれています。「例」を参照してください。

NextResult

このメソッドは、データ・リーダーを次の結果セットに拡張します。

宣言

// ADO.NET 2.0: C#
public override bool NextResult();

// ADO.NET 1.x: C#
public bool NextResult();

戻り値

別の結果セットが存在する場合はtrueを戻し、それ以外の場合はfalseを戻します。

実装

IDataReader

例外

InvalidOperationException: 接続がクローズされているか、またはリーダーがクローズされています。

備考

NextResultは、複数の結果セットを戻すストアド・プロシージャを実行した結果を読み取る場合に使用されます。

Read

このメソッドでは、結果セットで現在の次の行を読み取ります。

宣言

// 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メソッドが含まれています。「例」を参照してください。