ヘッダーをスキップ
Oracle® Data Provider for .NET開発者ガイド
12c リリース1(12.1)
B72971-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

OracleCommandクラス

OracleCommandオブジェクトは、SQLコマンド、ストアド・プロシージャまたは表の名前を表します。OracleCommandオブジェクトは、要求を作成してこれをデータベースに渡す処理を担当します。結果が戻される場合、OracleCommandは、OracleDataReader、.NET XmlReader、.NET Stream、スカラー値または出力パラメータとして結果を戻す処理を担当します。

クラスの継承

System.Object

  System.MarshalByRefObject

    System.ComponentModel.Component

      System.Data.Common.DbCommand

        Oracle.DataAccess.Client.OracleCommand

宣言

// C#
public sealed class OracleCommand : DbCommand, ICloneable

要件

プロバイダ 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

スレッド安全性

パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。

備考

OracleCommandからトランザクション関連文を実行しても、現行のローカル・トランザクション(存在する場合)を表すOracleTransactionオブジェクトの状態に反映されないため、お薦めできません。

ExecuteXmlReaderExecuteStreamおよびExecuteToStreamメソッドは、XML操作でのみサポートされています。

ExecuteReaderおよびExecuteScalarメソッドは、XML操作ではサポートされていません

オープン・サーバー・カーソルの数を最小限にするには、OracleCommandオブジェクトを明示的に処理する必要があります。

// C#
 
using System;
using System.Data;
using Oracle.DataAccess.Client; 
 
class OracleCommandSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    string cmdQuery = "select ename, empno from emp";
 
    // Create the OracleCommand
    OracleCommand cmd = new OracleCommand(cmdQuery);
 
    cmd.Connection = con;
    cmd.CommandType = CommandType.Text;
 
    // Execute command, create OracleDataReader object
    OracleDataReader reader = cmd.ExecuteReader();
 
    while (reader.Read())
    {
      // output Employee Name and Number
      Console.WriteLine("Employee Name : " + reader.GetString(0) + " , " + 
        "Employee Number : " + reader.GetDecimal(1));
    }
 
    // Clean up
    reader.Dispose();
    cmd.Dispose();
    con.Dispose();
  }
}

OracleCommandメンバー

OracleCommandメンバーは、次の各表にリストしています。

OracleCommandコンストラクタ

OracleCommandコンストラクタを、表6-6にリストします。

表6-6 OracleCommandコンストラクタ

コンストラクタ 説明

OracleCommandコンストラクタ

OracleCommandクラスの新規インスタンスをインスタンス化します(オーバーロード)


OracleCommand静的メソッド

OracleCommand静的メソッドを、表6-7にリストします。

表6-7 OracleCommand静的メソッド

メソッド 説明

Equals

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


OracleCommandプロパティ

OracleCommandプロパティを、表6-8にリストします。

表6-8 OracleCommandプロパティ

プロパティ 説明

AddRowid

選択リストの一部としてROWIDを追加します

AddToStatementCache


プロパティがtrueに設定されており、文キャッシングが有効な場合、実行された文をキャッシュします。

ArrayBindCount

配列バインディング機能を使用するかどうか、またValueプロパティにバインドする配列要素の最大数を指定します

ArrayBindRowsAffected

配列バインディングを使用したDMLの実行中に各操作で影響を受ける行数を戻します

BindByName

コレクションのバインディング・メソッドを指定します

CommandText

Oracle Databaseに対して実行するSQL文やストアド・プロシージャ、またはOracle Databaseに対する変更の格納に使用するXMLデータを指定します

CommandTimeout


例外で実行を終了するまでコマンドの実行を可能にする秒数を指定します

CommandType

CommandTextプロパティの解析方法を示すコマンド・タイプを指定します

Connection

コマンドを実行するための接続の識別に使用されるOracleConnectionオブジェクトを指定します

Container

System.ComponentModel.Componentからの継承

DesignTimeVisible


OracleCommandオブジェクトが設計者の制御で表示できるかどうかを指定します。

FetchSize

結果セット・データを格納するOracleDataReaderの内部キャッシュのサイズを指定します

ImplicitRefCursors


ストアド・プロシージャで戻される暗黙的結果セットにマップするOracleRefCursorsの配列を指定します

ODP.NET管理対象ドライバでは使用できません

InitialLOBFetchSize

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

InitialLONGFetchSize

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

Notification


コマンドに通知要求があることを示します

NotificationAutoEnlist


コマンド実行時に、連続問合せ通知がデータベースに自動登録されるかどうかを示します

Parameters

SQL文またはストアド・プロシージャのパラメータを指定します

RowSize

OracleDataReader内部キャッシュで1行のデータを格納するために必要なメモリー量を指定します

Site

System.ComponentModel.Componentからの継承

Transaction

OracleCommandが実行されるOracleTransactionオブジェクトを指定します

.NETストアド・プロシージャではサポートされません

UpdatedRowSource

問合せコマンドの結果が、更新されている列にどのように適用されるかを指定します

.NETストアド・プロシージャではサポートされません

UseEdmMapping

コマンド・オブジェクトがEntity Data Modelマッピング構成値を使用するかどうかを指定します。

XmlCommandType

OracleCommandのXML操作の型を指定します

ODP.NET管理対象ドライバでは使用できません

XmlQueryProperties

SQL問合せ文の結果セットからXML文書が作成される場合に使用されるプロパティを指定します

ODP.NET管理対象ドライバでは使用できません

XmlSaveProperties

データベースに対する変更の保存にXML文書が使用される場合のプロパティを指定します

ODP.NET管理対象ドライバでは使用できません


OracleCommandパブリック・メソッド

OracleCommandパブリック・メソッドを、表6-9にリストします。

表6-9 OracleCommandパブリック・メソッド

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

Cancel


特定の接続で現在実行されているコマンドの取消しを試行します

Clone

OracleCommandオブジェクトのコピーを作成します

CreateObjRef

System.MarshalByRefObjectからの継承

CreateParameter

OracleParameterクラスの新規インスタンスを作成します

Dispose

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

Equals

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

ExecuteNonQuery

XmlCommandTypeおよびCommandTextプロパティを使用してSQL文またはコマンドを実行し、影響を受ける行数を戻します

ExecuteReader

コマンドを実行します(オーバーロード)

ExecuteScalar

問合せにより戻された結果セットの最初の行の最初の列を戻します

ExecuteStream

XmlCommandTypeおよびCommandTextプロパティを使用してコマンドを実行し、新規Streamオブジェクトに結果を戻します

ExecuteToStream

XmlCommandTypeおよびCommandTextプロパティを使用してコマンドを実行し、結果をXML文書として既存のStreamに追加します

ExecuteXmlReader

XmlCommandTypeおよびCommandTextプロパティを使用してコマンドを実行し、結果をXML文書として.NET XmlTextReaderオブジェクトに戻します。

GetHashCode

System.Objectからの継承

GetLifetimeService

System.MarshalByRefObjectからの継承

GetType

System.Objectからの継承

InitializeLifetimeService

System.MarshalByRefObjectからの継承

Prepare

このメソッドは操作不能です

ToString

System.Objectからの継承


OracleCommandコンストラクタ

OracleCommandコンストラクタでは、OracleCommandクラスの新規インスタンスが作成されます。

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

  • OracleCommand()

    このコンストラクタでは、OracleCommandクラスの新規インスタンスが作成されます。

  • OracleCommand(String)

    このコンストラクタでは、指定されたSQLコマンドまたはストアド・プロシージャおよびOracle Databaseへの接続を使用して、OracleCommandクラスの新規インスタンスをインスタンス化します。

  • OracleCommand(string, OracleConnection)

    このコンストラクタでは、指定されたSQLコマンドまたはストアド・プロシージャおよびOracle Databaseへの接続を使用して、OracleCommandクラスの新規インスタンスをインスタンス化します。

OracleCommand()

このコンストラクタでは、OracleCommandクラスの新規インスタンスが作成されます。

宣言

// C#
public OracleCommand();

備考

デフォルトのコンストラクタ

OracleCommand(String)

このコンストラクタでは、指定されたSQLコマンドまたはストアド・プロシージャおよびOracle Databaseへの接続を使用して、OracleCommandクラスの新規インスタンスをインスタンス化します。

宣言

// C#
public OracleCommand(string cmdText);

パラメータ

  • cmdText

    実行されるSQLコマンドまたはストアド・プロシージャ

OracleCommand(string, OracleConnection)

このコンストラクタでは、指定されたSQLコマンドまたはストアド・プロシージャおよびOracle Databaseへの接続を使用して、OracleCommandクラスの新規インスタンスをインスタンス化します。

宣言

// C#
public OracleCommand(string cmdText, OracleConnection OracleConnection);

パラメータ

  • cmdText

    実行されるSQLコマンドまたはストアド・プロシージャ

  • OracleConnection

    Oracle Databaseへの接続

OracleCommand静的メソッド

OracleCommand静的メソッドを、表6-10にリストします。

表6-10 OracleCommand静的メソッド

メソッド 説明

Equals

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


OracleCommandプロパティ

OracleCommandプロパティを、表6-11にリストします。

表6-11 OracleCommandプロパティ

プロパティ 説明

AddRowid


選択リストの一部としてROWIDを追加します

AddToStatementCache


プロパティがtrueに設定されており、文キャッシングが有効な場合、実行された文をキャッシュします。

ArrayBindCount

配列バインディング機能を使用するかどうか、またValueプロパティにバインドする配列要素の最大数を指定します

ArrayBindRowsAffected

配列バインディングを使用したDMLの実行中に各操作で影響を受ける行数を戻します

BindByName

コレクションのバインディング・メソッドを指定します

CommandText

Oracle Databaseに対して実行するSQL文やストアド・プロシージャ、またはOracle Databaseに対する変更の格納に使用するXMLデータを指定します

CommandTimeout


例外で実行を終了するまでコマンドの実行を可能にする秒数を指定します

CommandType

CommandTextプロパティの解析方法を示すコマンド・タイプを指定します

Connection

コマンドを実行するための接続の識別に使用されるOracleConnectionオブジェクトを指定します

Container

System.ComponentModel.Componentからの継承

DesignTimeVisible


OracleCommandオブジェクトが設計者の制御で表示できるかどうかを指定します。

FetchSize

結果セット・データを格納するOracleDataReaderの内部キャッシュのサイズを指定します

ImplicitRefCursors


ストアド・プロシージャで戻される暗黙的結果セットにマップするOracleRefCursorsの配列を指定します

ODP.NET管理対象ドライバでは使用できません

InitialLOBFetchSize

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

InitialLONGFetchSize

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

Notification


コマンドに通知要求があることを示します

NotificationAutoEnlist


コマンド実行時に、連続問合せ通知がデータベースに自動登録されるかどうかを示します

Parameters

SQL文またはストアド・プロシージャのパラメータを指定します

RowSize

OracleDataReader内部キャッシュで1行のデータを格納するために必要なメモリー量を指定します

Site

System.ComponentModel.Componentからの継承

Transaction


OracleCommandが実行されるOracleTransactionオブジェクトを指定します

.NETストアド・プロシージャではサポートされません

UpdatedRowSource


問合せコマンドの結果が、更新されている列にどのように適用されるかを指定します

.NETストアド・プロシージャではサポートされません

UseEdmMapping


コマンド・オブジェクトがEntity Data Modelマッピング構成値を使用するかどうかを指定します。

XmlCommandType

OracleCommandのXML操作の型を指定します

XmlQueryProperties

SQL問合せ文の結果セットからXML文書が作成される場合に使用されるプロパティを指定します

XmlSaveProperties

データベースに対する変更の保存にXML文書が使用される場合のプロパティを指定します


AddRowid

このプロパティでは、選択リストの一部としてROWIDを追加します。

宣言

// C#
public bool AddRowid {get; set;}

プロパティ値

bool

備考

デフォルトはfalse

このROWID列は非表示で、アプリケーションでアクセスすることはできません。表のROWIDにアクセスするには、このプロパティを使用しないでROWIDを明示的に選択リストに追加する必要があります。

AddToStatementCache

このプロパティがtrueに設定され、文キャッシングが有効な場合は、実行された文がキャッシュされます。文キャッシングが無効な場合、またはこのプロパティがfalseに設定されている場合、実行された文はキャッシュされません。

宣言

// C#
public bool AddToStatementCache{get; set;}

戻り値

bool値を戻します。値trueは文がキャシュに追加されていることを示し、falseはそうでないことを示します。

プロパティ値

文キャッシングが有効になっている場合、文の実行時に文がキャッシュされるということを示すbool

備考

デフォルトはtrueです。

文キャッシングが無効な場合、AddToStatementCacheは無視されます。文キャッシングは、Statement Cache Size接続文字列属性を0より大きい値に設定すると有効になります。

ただし、文キャッシングが有効な場合、このプロパティは文をキャッシュに選択的に追加する方法を提供します。

// C#
 
using System;
using System.Data;
using Oracle.DataAccess.Client; 
 
class AddToStatementCacheSample
{
  static void Main()
  {
    string constr = "User Id=scott;Password=tiger;Data Source=oracle;" +
      "statement cache size=10";
    OracleConnection con = new OracleConnection(constr);
    con.Open();
 
    OracleCommand cmd = new OracleCommand("select * from emp", con);
 
    if (cmd.AddToStatementCache)
      Console.WriteLine("Added to the statement cache:" + cmd.CommandText);
    else
      Console.WriteLine("Not added to the statement cache:" + cmd.CommandText);
 
    // The execution of "select * from emp" will be added to the statement cache
    // because statement cache size is greater than 0 and OracleCommand's
    // AddToStatementCache is true by default.
    OracleDataReader readerEmp = cmd.ExecuteReader();
 
    // Do not add "select * from dept" to the statement cache
    cmd.CommandText = "select * from dept";
    cmd.AddToStatementCache = false;
 
    if (cmd.AddToStatementCache)
      Console.WriteLine("Added to the statement cache:" + cmd.CommandText);
    else
      Console.WriteLine("Not added to the statement cache:" + cmd.CommandText);
 
    // The execution of "select * from dept" will not be added to the 
    // statement cache because AddToStatementCache is set to false.
    OracleDataReader readerDept = cmd.ExecuteReader();
 
    // Clean up
    con.Dispose();
  }
}

ArrayBindCount

このプロパティでは、配列バインド機能を使用するかどうかを指定し、OracleParameter Valueプロパティでバインドされる配列要素数を指定します。

宣言

// C#
public int ArrayBindCount {get; set;}

プロパティ値

OracleParameter Valueプロパティでバインドされる配列要素数を指定する整数

例外

ArgumentException - 指定されたArrayBindCount値が無効

備考

デフォルト = 0

ArrayBindCount0の場合は、配列バインドは使用されません。それ以外の場合は、配列バインドが使用されOracleParameter Valueプロパティが値の配列として解釈されます。配列バインド機能を使用する場合は、ArrayBindCountの値を指定する必要があります。

DbTypeOracleDbTypeのどちらも設定されていない場合は、OracleParameter Valueプロパティを設定する前にArrayBindCountを設定して、ValueからのDbTypeおよびOracleDbTypeの判断が正しくできるようにすることをお薦めします。

デフォルトでは配列バインドは使用されません。

XmlCommandTypeプロパティがNone以外の任意の値に対して設定されている場合は、このプロパティは無視されます。

ArrayBindRowsAffected

このプロパティは、配列バインディングを使用したDMLの実行中に各操作で影響を受ける行数を戻します。

宣言

// C#
public long[] ArrayBindRowsAffected ;

プロパティ値

long型

BindByName

このプロパティでは、コレクションのバインド・メソッドを指定します。

宣言

// C#
public bool BindByName {get; set;}

プロパティ値

パラメータが名前別にバインドされる場合はtrueを戻し、位置別にバインドされる場合はfalseを戻します。

備考

デフォルト = false

次の条件の場合、BindByNameは無視されます。

  • XmlCommandTypeプロパティの値が、InsertUpdateまたはDeleteの場合

  • XmlCommandTypeプロパティの値がQueryであるが、OracleCommandにパラメータが設定されていない場合

XmlCommandTypeプロパティがOracleXmlCommandType.Queryで、任意のパラメータがOracleCommandで設定されている場合は、BindByNameプロパティをtrueに設定する必要があります。それ以外の場合は、次のOracleCommandメソッドではInvalidOperationExceptionをスローします。

  • ExecuteNonQuery

  • ExecuteXmlReader

  • ExecuteStream

  • ExecuteToStream

CommandText

このプロパティでは、Oracle Databaseに対して実行するSQL文またはストアド・プロシージャ、またはOracle Databaseの変更を格納する際に使用するXMLデータを指定します。

宣言

// C#
public override string CommandText {get; set;}

プロパティ値

string

実装

IDbCommand

備考

デフォルトは空の文字列です。

CommandTypeプロパティがStoredProcedureに設定されると、CommandTextプロパティはストアド・プロシージャの名前に設定されます。Executeメソッドが呼び出されると、コマンドはこのストアド・プロシージャを呼び出します。

CommandTextXmlCommandType値への影響は次のとおりです。

  • XmlCommandType = None

    CommandTypeプロパティによってCommandTextの内容が決まります。

  • XmlCommandType = Query

    CommandTextはSQL問合せである必要があります。SQL問合せは選択文である必要があります。CommandTypeプロパティは無視されます。

  • XmlCommandTypeプロパティは、InsertUpdateまたはDeleteです。

    CommandTextはXML文書である必要があります。CommandTypeプロパティは無視されます。

CommandTimeout

このプロパティは、コマンドが例外で実行を終了するまでに実行可能な最小秒数を指定します。

宣言

// C#
public override int CommandTimeout {get; set;}

プロパティ値

int

実装

IDbCommand.CommandTimeout

例外

InvalidArgument - 指定された値が0未満です。

備考

デフォルトは0秒で、時間の制限はありません。

コマンドの実行が終了する前に、指定されたタイムアウト値を超えた場合、コマンドは取消しを試みます。正しく取り消された場合は、ORA-01013: user requested cancel of current operationというメッセージの例外がスローされます。コマンドのタイムアウトの期限切れが発生した場合、他の例外としてORA-00936およびORA-00604がスローされることがあります。コマンドが期限内にエラーなしで実行された場合は、例外がスローされません。

複数のOracleCommandオブジェクトで同じ接続を使用している場合、いずれかのOracleCommandオブジェクトでタイムアウトが発生すると、その接続上の他の実行が終了する可能性があります。OracleCommandCommandTimeoutプロパティの値が0より大きく設定されている場合、OracleCommandのタイムアウトの際に、該当するコマンド実行のみが取り消されるようにするには、各接続でOracleCommandを1つのみ使用するようにします。

CommandType

このプロパティでは、CommandTextプロパティの解釈の方法を示すコマンド・タイプを指定します。

宣言

// C#
public override CommandType CommandType {get; set;}

プロパティ値

CommandType

例外

ArgumentException: CommandType.TextCommandType.StoredProcedureCommandType.TableDirectなどのように、この値は無効なCommandTypeです。

備考

デフォルト = CommandType.Text

XmlCommandTypeプロパティの値がNoneではない場合は、CommandTypeプロパティは無視されます。

Connection

このプロパティでは、コマンドを実行する接続の識別に使用されるOracleConnectionオブジェクトを指定します。

宣言

// C#
public OracleConnection Connection {get; set;}

プロパティ値

OracleConnectionオブジェクト

実装

IDbCommand

備考

デフォルト = null

DesignTimeVisible

このプロパティは、OracleCommandオブジェクトが設計者の制御で表示できるかどうか指定します。

宣言

// C#
public override bool DesignTimeVisible { get; set; }

プロパティ値

OracleCommandオブジェクトが制御により表示できるかどうかを示す値。デフォルトはtrueです。

備考

開発者はこのプロパティを使用してOracleCommandオブジェクトが制御により表示できるかどうかを示します。

FetchSize

このプロパティは、OracleDataReaderの内部キャッシュのサイズを指定し、結果セットのデータを格納します。

宣言

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

プロパティ値

OracleDataReaderの内部キャッシュのサイズ(バイト)を指定するlongです。

例外

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

備考

デフォルト = 131072。

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

XmlCommandTypeプロパティがNone以外の任意の値に対して設定されている場合は、このプロパティは無視されます。

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プロパティによって算定されます。

ImplicitRefCursors

このプロパティは、OracleRefCursorsの配列を戻します(それぞれのOracleRefCursorは、ストアド・プロシージャで戻される暗黙的結果セットにマップされます)。

宣言

// C#
public OracleRefCursor[] ImplicitRefCursors {get; set;}

プロパティ値

OracleRefCursorsの配列

備考

このプロパティが移入されるのは、ExecuteNonQueryを通じてストアド・プロシージャが実行されるときのみです(他のシナリオで移入されることはありません)。

InitialLOBFetchSize

このプロパティは、OracleDataReaderがLOB列に対して最初にフェッチするデータ量を指定します。

宣言

// C#
public int InitialLOBFetchSize {get; set;}

プロパティ値

最初にフェッチする文字数またはバイト数を指定するint

例外

ArgumentException - 指定したInitialLOBFetchSize値が無効です。

備考

InitialLOBFetchSizeの値は、OracleDataReaderによってただちにフェッチされるLOBデータの初期量を指定します。プロパティ値は、CLOBおよびNCLOBデータの場合は文字数、BLOBデータの場合はバイト数を指定します。

InitialLOBFetchSize値を使用して、LOB列が選択リストにある場合にフェッチするLOB列データ長を決定します。LOB列が選択リストにない場合、InitialLOBFetchSize値は無視されます。

InitialLOBFetchSize-1に設定されている場合、LOBデータ全体がプリフェッチされ、フェッチ配列に格納されます。

デフォルト = 0

InitialLOBFetchSizeに対してサポートされている最大値は2GBです。

GetOracleBlobおよびGetOracleClobメソッドを使用すると、InitialLOBFetchSize値にかかわらず任意のLOBを取得できます。

InitialLONGFetchSize

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

宣言

// C#
public int InitialLONGFetchSize {get; set;}

プロパティ値

量を指定するint

例外

ArgumentException - 指定したInitialLONGFetchSize値が無効です。

備考

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

InitialLONGFetchSizeの値は、OracleDataReaderによってただちにフェッチされるLONGまたはLONG RAWのデータの初期量を指定します。プロパティ値は、LONGデータの場合は文字数、LONG RAWの場合はバイト数を指定します。指定されたInitialLONGFetchSizeの量より多くフェッチするには、次のうちの1つが選択リストにある必要があります。

  • 主キー

  • ROWID

  • 一意の列 - (一意制約が定義されたか、または一意索引が作成された1セットの列として定義されたもの。セット内の少なくとも1列には、ここで定義されたNOT NULL制約があります)

LONGまたはLONG RAWデータのいずれかが選択リストにある場合、InitialLONGFetchSize値は、LONGおよびLONG RAW列データ長の決定に使用されます。選択リストにLONGまたはLONG RAW列が含まれていない場合、InitialLONGFetchSize値は無視されます。

InitialLONGFetchSize-1に設定されている場合、LONGデータまたはLONG RAWデータ全体がプリフェッチされ、フェッチ配列に格納されます。OracleDataReaderGetStringGetCharsまたはGetBytesをコールすると、データ全体を検索できます。

デフォルト = 0

このプロパティを0に設定すると、そのプロパティがアプリケーションにより要求されるまでLONGおよびLONG RAWデータの検索全体が延期されます。

通知

このインスタンス・プロパティは、コマンドに通知要求があることを示します。

宣言

// C#
public OracleNotificationRequest  Notification {set; get;}

プロパティ値

コマンドの通知要求

備考

最初の変更通知が登録されると、クライアント・リスナーが開始され、データベース通知を受け取れるようになります。リスナーでは、OracleDependency.Port静的フィールドで定義されているポート番号が使用されます。後続の変更通知登録では、同じクライアント・プロセス内の同じリスナーが使用され、別のリスナーは開始されません。

NotificationOracleNotificationRequestインスタンスに設定されている場合は、コマンドの実行時に通知登録が作成されます(まだ作成されていない場合)。登録の作成後は、OracleNotificationRequestインスタンスのプロパティは変更できません。通知登録がすでに作成されている場合は、コマンドに関連付けられている結果セットが既存の登録に追加されます。

Notificationnullに設定されている場合、後続コマンドの実行に通知要求は不要になります。通知要求が不要な場合は、Notificationプロパティをnullに設定するか、NotificationAutoEnlistプロパティをfalseに設定します。

連続問合せ通知の場合、通知要求は複数のコマンドの実行に使用できます。その場合、異なるコマンドに関連する問合せ結果セットを同じ登録内で無効にすることができます。

OracleDependency.OnChangeイベントが実行される際に、ROWID列が明示的に問合せに含まれる(または、AddRowidプロパティがtrueに設定される)場合は、Rowid列にOracleNotificationEventArgs.Detailsプロパティが参照するDataTable内のROWID値が含まれます。OracleDependency.RowidInfoOracleRowidInfo.IncludeまたはOracleRowidInfo.Excludeにそれぞれ設定して、OracleNotificationEventArgs内のROWID値を含めるか含めないかを明示的に要求することで、この動作をオーバーライドできます。

NotificationAutoEnlist

このインスタンス・プロパティは、コマンドの実行時に連続問合せ通知がデータベースに自動登録されるかどうかを示します。

宣言

// C#
public bool NotificationAutoEnlist {set; get;}

プロパティ値

コマンドの実行時に自動的に連続問合せ通知要求が作成されるかどうかを示すbool値。NotificationAutoEnlisttrueに設定されていて、Notificationプロパティが適切に設定されている場合は、連続問合せ通知要求が自動登録されます(それ以外の場合、連続問合せ通知は登録されません)。

デフォルト値: true

備考

通知要求は、同じOracleCommandインスタンスを使用する複数のコマンドの実行に使用できます。その場合には、NotificationAutoEnlistプロパティをtrueに設定します。

パラメータ

このプロパティは、SQL文またはストアド・プロシージャのパラメータを指定します。

宣言

// C#
public OracleParameterCollection Parameters {get;}

プロパティ値

OracleParameterCollection

実装

IDbCommand

備考

デフォルト値 = 空のコレクション

コレクション内のパラメータ数は、コマンド・テキスト内のパラメータ・プレースホルダの数と同じである必要があります。同じでない場合は、エラーが発生します。

コマンド・テキストにパラメータ・トークン(たとえば、:1,:2など)が含まれていない場合、Parametersプロパティ内の値は無視されます。

RowSize

このプロパティは、OracleDataReader内部キャッシュがデータの1行を保存するために必要とするメモリー量を指定します。

宣言

// C#
public long RowSize {get;}

プロパティ値

longは、OracleDataReaderが実行された問合せのデータ1行を格納するために必要とするメモリー量(バイト)を示します。

備考

デフォルト値 = 0

RowSizeプロパティは、結果セットを戻すコマンドの実行後、ゼロ以外の値に設定されます。このプロパティは、行数に基づいてFetchSizeを設定する場合に、設計時または実行時に動的に使用できます。たとえば、OracleDataReaderを有効にして、データベース・ラウンドトリップごとにN行をフェッチするには、OracleDataReaderFetchSizeプロパティをRowSize * Nに動的に設定できます。FetchSizeを適切に有効化するには、OracleCommand.ExecuteReader()の後に設定し、かつOracleDataReader.Read()の前に設定する必要があることに注意してください。

ODP.NETのRowSize値の計算では、現在、VARCHAR2型、NVARCHAR2型、RAW型の列について、32Kまでの値をサポートしています。

Transaction

このプロパティは、OracleCommandの実行対象となるOracleTransactionオブジェクトを指定します。

宣言

// C#
public OracleTransaction Transaction {set; get;}

プロパティ値

OracleTransaction

実装

IDbCommand

備考

デフォルト値 = null

Transactionは、OracleCommand接続オブジェクトに関連付けられたトランザクション・オブジェクトへの参照を戻します。そのため、現在接続を実行しているすべてのトランザクションのコンテキストにおいても、コマンドが実行されます。


注意:

このプロパティがIDbCommand参照でアクセスされた場合、その一連のアクセッサ・メソッドは操作できません。

備考(.NETストアド・プロシージャ)

常にnullを戻します。

UpdatedRowSource

このプロパティは、問合せコマンドの結果が、更新される行にどのように適用されるかを指定します。

宣言

// C#
public override UpdateRowSource UpdatedRowSource {get; set;}

プロパティ値

UpdateRowSource

実装

IDbCommand

例外

ArgumentException - 指定されたUpdateRowSource値が無効です。

備考

常にUpdateRowSourceを戻します。

値がUpdateRowSource.None以外の場合、SetアクセッサはArgumentExceptionをスローします。

UseEdmMapping

このプロパティは、OracleCommandオブジェクトがEntity Data Modelマッピング構成値を使用するかどうかを指定します。

宣言

// C#
public bool UseEdmMapping

プロパティ値

bool

備考

デフォルトはfalse

UseEdmMappingプロパティを使用すると、OracleCommandオブジェクトがEntity Data Modelマッピング構成値を使用することを明示的に指定できます。これにより、Entity Frameworkの複数結果セットの機能を使用できます。

XmlCommandType

このプロパティは、OracleCommandのXML操作のタイプを指定します。

宣言

// C#
public OracleXmlCommandType XmlCommandType {get; set;}

プロパティ値

OracleXmlCommandType

備考

デフォルト値は、None

XmlCommandType値と使用方法

  • None - CommandTypeプロパティは、操作のタイプを指定します。

  • Query - CommandTextプロパティは、SQL SELECT文に設定する必要があります。問合せが実行され、結果がXML文書として戻されます。CommandText内のSQL SELECT文およびXmlQueryPropertiesプロパティにより指定されたプロパティは、操作の実行に使用されます。CommandTypeプロパティは無視されます。

  • InsertUpdateまたはDelete - CommandTextプロパティは、変更の対象を含むXML文書です。CommandText内のXML文書およびXmlSavePropertiesプロパティにより指定されたプロパティは、操作の実行に使用されます。CommandTypeプロパティは無視されます。

XmlQueryProperties

このプロパティは、XML文書をSQL問合せ文の結果セットから作成する場合に使用されるプロパティを指定します。

宣言

// C#
public OracleXmlQueryProperties XmlQueryProperties {get; set;}

プロパティ値

OracleXmlQueryProperties

備考

OracleCommandの新規インスタンスが作成されると、OracleXmlQueryPropertiesのインスタンスはOracleCommand.XmlQueryPropertiesプロパティを通じてOracleCommandインスタンス上で自動的に有効になります。

OracleXmlQueryPropertiesの新規インスタンスは、OracleCommandインスタンスに割り当てられます。OracleXmlQueryPropertiesのインスタンスをOracleCommandインスタンスのXmlQueryPropertiesに割り当てると、OracleCommandに対する指定されたインスタンスOracleXmlQueryPropertiesの新規インスタンスが作成されます。この方法で、各OracleCommandインスタンスは、独自のOracleXmlQueryPropertiesインスタンスを取得します。

デフォルトのコンストラクタを使用して、OracleXmlQueryPropertiesの新規インスタンスを取得します。

OracleXmlQueryPropertiesインスタンスのコピーを取得するには、OracleXmlQueryProperties.Clone()メソッドを使用します。

XmlSaveProperties

このプロパティを使用して、XML文書によるデータベースへの変更の保存を行う場合に使用されるプロパティを指定します。

宣言

// C#
public OracleXmlSaveProperties XmlSaveProperties {get; set;}

プロパティ値

OracleXmlSaveProperties

備考

OracleCommandの新規インスタンスが作成されると、OracleXmlSavePropertiesのインスタンスはOracleCommand.XmlSavePropertiesプロパティを通じてOracleCommandインスタンス上で自動的に有効になります。

OracleXmlSavePropertiesの新規インスタンスは、OracleCommandインスタンスに割り当てられます。OracleXmlSavePropertiesのインスタンスをOracleCommandインスタンスのXmlSavePropertiesに割り当てると、OracleCommandに対して指定されたインスタンスOracleXmlSavePropertiesの新規インスタンスが作成されます。この方法で、各OracleCommandインスタンスは、独自のOracleXmlSavePropertiesインスタンスを取得します。

OracleXmlSavePropertiesの新規インスタンスを取得するには、デフォルトのコンストラクタを使用します。

OracleXmlSaveProperties.Clone()メソッドを使用して、OracleXmlSavePropertiesインスタンスのコピーを取得します。

OracleCommandパブリック・メソッド

OracleCommandパブリック・メソッドを、表6-12にリストします。

表6-12 OracleCommandパブリック・メソッド

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

Cancel


特定の接続で現在実行されているコマンドの取消しを試行します

Clone

OracleCommandオブジェクトのコピーを作成します

CreateObjRef

System.MarshalByRefObjectからの継承

CreateParameter

OracleParameterクラスの新規インスタンスを作成します

Dispose


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

Equals

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

ExecuteNonQuery

XmlCommandTypeおよびCommandTextプロパティを使用してSQL文またはコマンドを実行し、影響を受ける行数を戻します

ExecuteReader

コマンドを実行します(オーバーロード)

ExecuteScalar

問合せにより戻された結果セットの最初の行の最初の列を戻します

ExecuteStream

XmlCommandTypeおよびCommandTextプロパティを使用してコマンドを実行し、新規Streamオブジェクトに結果を戻します

ExecuteToStream

XmlCommandTypeおよびCommandTextプロパティを使用してコマンドを実行し、結果をXML文書として既存のStreamに追加します

ExecuteXmlReader

XmlCommandTypeおよびCommandTextプロパティを使用してコマンドを実行し、結果をXML文書として.NET XmlTextReaderオブジェクトに戻します。

GetHashCode

System.Objectからの継承

GetLifetimeService

System.MarshalByRefObjectからの継承

GetType

System.Objectからの継承

InitializeLifetimeService

System.MarshalByRefObjectからの継承

Prepare

このメソッドは操作不能です

ToString

System.Objectからの継承


Cancel

このメソッドは、特定の接続で現在実行されているコマンドの取消しを試みます。

宣言

// C#
public override void Cancel();

実装

IDbCommand.Cancel

備考

コマンドが正しく取り消された場合は、例外がスローされます。正しく取り消されない場合、例外はスローされません。Cancelの起動時に実行中のコマンドがない場合、Cancelは何も実行しません。Cancelメソッドを起動しても、その時点で実行されているコマンドが常に取り消されることが保証されるわけではありません。実行が終了する前にその実行が完了する場合があります。このような場合、例外はスローされません。

複数のOracleCommandオブジェクトが同じ接続を共有する場合、その接続上の一時点で実行できるコマンドは1つのみです。Cancelメソッドは、起動されると、OracleCommandオブジェクトがコマンドの実行に使用している接続上で現在実行されている文を取り消そうとします。ただし、複数のOracleCommandオブジェクトが同じ接続上で同時に文を実行している場合は、Cancelメソッドを起動すると、発行済のコマンドが取り消される可能性があります。これは、Cancelの起動が有効になる前に取消を指示したコマンドが完了する可能性があるためです。これが発生した場合、別のOracleCommandによって実行されるコマンドが、かわりに取り消される可能性があります。

Cancelメソッドが原因となるこの不確定な状況を回避するには、次のようないくつかの方法があります。

  • アプリケーションで各接続にOracleCommandオブジェクトを1つのみ作成できます。これにより、特定の接続を使用するOracleCommandオブジェクトで実行されるコマンドのみが、Cancelの起動によって確実に取り消されます。

  • アプリケーション内でのコマンドの実行は、同じ接続を使用するOracleCommandオブジェクト間で同期化することができます。

Cancelがアプリケーションで使用されない場合、前述の内容は適用されません。

現在の実行がいつ終了するかは不明確であるため、非原子的なSQLまたはPL/SQLの実行はトランザクション内で開始することをお薦めします。コマンドの実行が例外ORA-01013: user requested cancel of current operationで正しく終了した場合、トランザクションをロールバックしてデータの整合性を保つことができます。コマンドの取消が発生した場合、他の例外としてORA-00936およびORA-00604がスローされることがあります。非原子的な実行の例としては、1つずつ実行されるDMLコマンドのコレクションや、PL/SQLのストアド・プロシージャまたは関数の一部である複数のDMLコマンドなどがあります。

// C#
 
// This example shows how command executions can be cancelled in a 
// deterministic way even if multiple commands are executed on a single 
// connection.  This is accomplished by synchronizing threads through events.
// Since the Cancel method terminates the currently running operation on the
// connection, threads must be serialized if multiple threads are using the 
// same connection to execute server round-trip incurring operations.
// Furthermore, the example shows how the execution and cancel threads should
// be synchronized so that nth iteration of the command execution does not
// inappropriately cancel the (n+1)th command executed by the same thread.
 
using System;
using System.Data;
using Oracle.DataAccess.Client;
using System.Threading;
 
class CancelSample
{
  private OracleCommand cmd;
  Thread t1, t2;
  // threads signal following events when assigned operations are completed
 
  private AutoResetEvent ExecuteEvent = new AutoResetEvent(false);
  private AutoResetEvent CancelEvent = new AutoResetEvent(false);
  private AutoResetEvent FinishedEvent = new AutoResetEvent(false);
  AutoResetEvent[] ExecuteAndCancel = new AutoResetEvent[2];
 
  // Default constructor
  CancelSample()
  {
    cmd = new OracleCommand("select * from all_objects",
      new OracleConnection("user id=scott;password=tiger;data source=oracle"));
    ExecuteAndCancel[0] = ExecuteEvent;
    ExecuteAndCancel[1] = CancelEvent;
  }
 
  // Constructor that takes a particular command and connection
  CancelSample(string command, OracleConnection con)
  {
    cmd = new OracleCommand(command, con);
    ExecuteAndCancel[0] = ExecuteEvent;
    ExecuteAndCancel[1] = CancelEvent;
  }
 
  // Execution of the command
  public void Execute()
  {
    OracleDataReader reader = null;
    try
    {
      Console.WriteLine("Execute.");
      reader = cmd.ExecuteReader();
      Console.WriteLine("Execute Done.");
      reader.Close();
    }
    catch(Exception e)
    {
      Console.WriteLine("The command has been cancelled.", e.Message);
    }
    Console.WriteLine("ExecuteEvent.Set()");
    ExecuteEvent.Set();
  }
 
  // Canceling of the command
  public void Cancel()
  {
    try
    {
      // cancel query if it takes longer than 100 ms to finish execution
      System.Threading.Thread.Sleep(100);
      Console.WriteLine("Cancel.");
      cmd.Cancel();
    }
    catch (Exception e)
    {
      Console.WriteLine(e.ToString());
    }
    Console.WriteLine("Cancel done.");
    Console.WriteLine("CancelEvent.Set()");
    CancelEvent.Set();
  }
 
  // Execution of the command with a potential of cancelling
  public void ExecuteWithinLimitedTime()
  {
    for (int i = 0; i < 5; i++)
    {
      Monitor.Enter(typeof(CancelSample));
      try
      {
        Console.WriteLine("Executing " + this.cmd.CommandText);
        ExecuteEvent.Reset();
        CancelEvent.Reset();
        t1 = new Thread(new ThreadStart(this.Execute));
        t2 = new Thread(new ThreadStart(this.Cancel));
        t1.Start();
        t2.Start();
      }
      finally
      {
        WaitHandle.WaitAll(ExecuteAndCancel);
        Monitor.Exit(typeof(CancelSample));
      }
    }
    FinishedEvent.Set();
  }
  [MTAThread]
  static void Main()
  {
    try
    {
      AutoResetEvent[] ExecutionCompleteEvents = new AutoResetEvent[3];
 
      // Create the connection that is to be used by three commands
      OracleConnection con = new OracleConnection("user id=scott;" +
        "password=tiger;data source=oracle");
      con.Open();
 
      // Create instances of CancelSample class
      CancelSample test1 = new CancelSample("select * from all_objects", con);
      CancelSample test2 = new CancelSample("select * from all_objects, emp", 
                                            con);
      CancelSample test3 = new CancelSample("select * from all_objects, dept", 
                                            con);
 
      // Create threads for each CancelSample object instance
      Thread t1 = new Thread(new ThreadStart(test1.ExecuteWithinLimitedTime));
      Thread t2 = new Thread(new ThreadStart(test2.ExecuteWithinLimitedTime));
      Thread t3 = new Thread(new ThreadStart(test3.ExecuteWithinLimitedTime));
 
      // Obtain a handle to an event from each object
      ExecutionCompleteEvents[0] = test1.FinishedEvent;
      ExecutionCompleteEvents[1] = test2.FinishedEvent;
      ExecutionCompleteEvents[2] = test3.FinishedEvent;
      
      // Start all threads to execute three commands using a single connection
      t1.Start();
      t2.Start();
      t3.Start();
 
      // Wait for all three commands to finish executing/canceling before
      //closing the connection
      WaitHandle.WaitAll(ExecutionCompleteEvents);
      con.Close();
    }
    catch (Exception e)
    {
      Console.WriteLine(e.ToString());
    }
  }
}

Clone

このメソッドでは、OracleCommandオブジェクトのコピーを作成します。

宣言

// C#
public object Clone();

戻り値

OracleCommandオブジェクト

実装

ICloneable

備考

複製されたオブジェクトのプロパティ値は、複製元のオブジェクトのプロパティ値と同じです。

CreateParameter

このメソッドでは、OracleParameterクラスの新規インスタンスを作成します。

宣言

// C#
public OracleParameter CreateParameter();

戻り値

デフォルト値の新規OracleParameter

実装

IDbCommand

Dispose

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

宣言

// C#
public void Dispose();

実装

IDisposable

備考

Disposeメソッドでは、OracleCommandオブジェクトもクローズします。

ExecuteNonQuery

このメソッドでは、XmlCommandTypeプロパティおよびCommandTextプロパティを使用してSQL文またはコマンドを実行し、影響を受ける行数を戻します。

宣言

// C#
public override int ExecuteNonQuery();

戻り値

影響を受ける行数

実装

IDbCommand

例外

InvalidOperationException - コマンドを実行できない場合

備考

ExecuteNonQueryでは、次の場合に影響を受ける行数を戻します。

  • コマンドが、UPDATEINSERTまたはDELETEで、XmlCommandTypeプロパティがOracleXmlCommandType.Noneに設定されている場合。

  • XmlCommandTypeプロパティが、OracleXmlCommandType.InsertOracleXmlCommandType.UpdateOracleXmlCommandType.Deleteに設定されている場合。

その他のすべての文のタイプに対する戻り値は-1です。

ExecuteNonQueryは次のいずれかに対して使用されます。

  • カタログ操作(データベース構造の問合せまたは表などのデータベース・オブジェクトの作成など)。

  • UPDATEINSERTまたはDELETE文の実行による、DataSetを使用しないデータベース内のデータ変更。

  • XML文書を使用したデータベース内のデータ変更。

ExecuteNonQueryでは、行を戻しませんが、任意の出力パラメータを移入したりまたはパラメータにマップされる値のデータを戻します。

XmlCommandTypeプロパティがOracleXmlCommandType.Queryに設定されている場合、ExecuteNonQueryCommandTextプロパティ内の選択文を実行し、成功した場合-1を戻します。生成されるXML文書は廃棄されます。これは、結果としてXML文書を戻さないで操作が正常に完了するかどうかを判別する場合に便利です。

XmlCommandTypeプロパティが、OracleXmlCommandType.InsertOracleXmlCommandType.Updateまたは、OracleXmlCommandType.Deleteに設定されている場合、CommandTextプロパティの値はXML文書です。ExecuteNonQueryでは、そのXML文書の変更をXmlSavePropertiesプロパティで指定されている表またはビューに保存します。戻り値はXML文書で処理された行数です。また、XML文書の各行もデータベース内の複数行に影響を与える可能性がありますが、この場合も戻り値はXML文書の行数です。

// C#
 
using System;
using System.Data;
using Oracle.DataAccess.Client; 
 
class ExecuteNonQuerySample
{
  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 sal from emp where empno=7934", con);
 
    object sal = cmd.ExecuteScalar();
    Console.WriteLine("Employee sal before update: " + sal);
 
    cmd.CommandText = "update emp set sal = sal + .01 where empno=7934";
 
    // Auto-commit changes
    int rowsUpdated = cmd.ExecuteNonQuery();
 
    if (rowsUpdated > 0)
    {
      cmd.CommandText = "select sal from emp where empno=7934";
      sal = cmd.ExecuteScalar();
      Console.WriteLine("Employee sal after update: " + sal);
    }
 
    // Clean up
    cmd.Dispose();
    con.Dispose();
  }
}

要件

XMLをサポートするために、このメソッドではデータベースにOracle9i XML Developer's Kits(Oracle XDK)以降をインストールする必要があります。Oracle XDKはOracle Technology Network(OTN)からダウンロードできます。

ExecuteReader

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

ExecuteReaderでは、CommandTextで指定されたコマンドを実行します。

  • ExecuteReader()

    このメソッドでは、CommandTextで指定されたコマンドを実行し、OracleDataReaderオブジェクトを戻します。

  • ExecuteReader(CommandBehavior)

    このメソッドでは、CommandTextで指定されたコマンドを実行し、指定されたCommandBehavior値を使用してOracleDataReaderオブジェクトを戻します。

ExecuteReader()

このメソッドでは、CommandTextで指定されたコマンドを実行し、OracleDataReaderオブジェクトを戻します。

宣言

// C#
public OracleDataReader ExecuteReader();

戻り値

OracleDataReader

実装

IDbCommand

例外

InvalidOperationException - コマンドを実行できない場合

備考

CommandTypeプロパティがCommandType.StoredProcedureに設定されると、CommandTextプロパティはストアド・プロシージャの名前に設定される必要があります。

ExecuteReaderを呼び出すと、この指定したコマンドによってこのストアド・プロシージャが実行されます。ストアド・プロシージャのパラメータがREF CURSORオブジェクトで構成されている場合は、ExecuteReader()またはExecuteNonQuery()を呼び出すかどうかによって動作は異なります。ExecuteReader()を起動すると、REF CURSORオブジェクトは、戻されるOracleDataReaderを通じてアクセスできます。1つの実行から複数のREF CURSORが戻される場合、後続のREF CURSORオブジェクトは、NextResultメソッドによってOracleDataReaderで順番にアクセスできます。ExecuteNonQueryメソッドを起動すると、出力パラメータ値をOracleRefCursor型にキャストでき、次にOracleRefCursorオブジェクトを使用して、DataSetを移入するかまたはOracleDataReaderオブジェクトを作成できます。この方法で、出力パラメータとして戻されたすべてのREF CURSORオブジェクトにランダムにアクセスすることができます。

FetchSizeに対しては値100が使用されます。0を指定すると、行はフェッチされません。詳細は、「LONGおよびLONG RAWデータの取得」を参照してください。

XmlCommandTypeプロパティの値が、OracleXmlCommandType.InsertOracleXmlCommandType.UpdateOracleXmlCommandType.DeleteまたはOracleXmlCommandType.Queryに設定されている場合、ExecuteReaderメソッドはInvalidOperationExceptionをスローします。

// C#
 
using System;
using System.Data;
using Oracle.DataAccess.Client; 
 
class ExecuteReaderSample
{
  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 ename from emp", con);

    OracleDataReader reader = cmd.ExecuteReader();

    while (reader.Read())
    {
      Console.WriteLine("Employee Name : " + reader.GetString(0));
    }
 
    // Clean up
    reader.Dispose();
    cmd.Dispose();
    con.Dispose();
  }
}

ExecuteReader(CommandBehavior)

このメソッドでは、CommandTextで指定されたコマンドを実行し、指定された動作を使用してOracleDataReaderオブジェクトを戻します。

宣言

// C#
public OracleDataReader ExecuteReader(CommandBehavior behavior);

パラメータ

  • behavior

    必要な動作

戻り値

OracleDataReader

実装

IDbCommand

例外

InvalidOperationException - コマンドを実行できない場合

備考

結果の説明と問合せコマンドのデータベースに対する影響は、コマンド動作を規定する、指定されたbehaviorによって示されます。

有効なCommandBehavior値および各CommandBehaviorの列挙タイプのコマンドの動作は、.NET Frameworkのドキュメントを参照してください。

CommandTypeプロパティがCommandType.StoredProcedureに設定されると、CommandTextプロパティはストアド・プロシージャの名前に設定される必要があります。ExecuteReader()を呼び出すと、このコマンドによってこのストアド・プロシージャが実行されます。

ストアド・プロシージャが格納されたREF CURSORを戻す場合、詳細はOracleRefCursorの項を参照してください。「OracleRefCursorクラス」を参照してください。

FetchSizeに対しては値100が使用されます。0を指定すると、行はフェッチされません。詳細は、「LONGおよびLONG RAWデータの取得」を参照してください。

XmlCommandTypeプロパティの値が、OracleXmlCommandType.InsertOracleXmlCommandType.UpdateOracleXmlCommandType.DeleteまたはOracleXmlCommandType.Queryに設定されている場合、ExecuteReaderメソッドはInvalidOperationExceptionをスローします。

ExecuteScalar

このメソッドでは、接続を使用して問合せを実行し、問合せによって戻された結果セット内の最初の行の最初の列を戻します。

宣言

// C#
public override object ExecuteScalar();

戻り値

最初の行、最初の列の値を表すオブジェクト

実装

IDbCommand

例外

InvalidOperationException - コマンドを実行できない場合

備考

追加列または行は無視されます。ExecuteScalarでは、データベースから単一値(たとえば集合値)を取り出します。ExecuteReader()メソッドを使用する場合より少ないコードで済み、必要な操作を実行してOracleDataReaderによって戻されたデータで単一値を生成します。

問合せで行を戻さない場合は、nullを戻します。

XmlCommandTypeプロパティの値が次のいずれかに設定されている場合、ExecuteScalarメソッドがInvalidOperationExceptionをスローします。OracleXmlCommandType値: InsertUpdateDeleteQuery

// C#
 
using System;
using System.Data;
using Oracle.DataAccess.Client; 
 
class ExecuteScalarSample
{
  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 count(*) from emp", con);
 
    object count = cmd.ExecuteScalar();
 
    Console.WriteLine("There are {0} rows in table emp", count);
 
    // Clean up
    cmd.Dispose();
    con.Dispose();
  }
}

ExecuteStream

このメソッドでは、XmlCommandTypeプロパティとCommandTextプロパティを使用してコマンドを実行し、結果を新規StreamオブジェクトにXML文書として戻します。

宣言

// C#
public Stream ExecuteStream();

戻り値

Stream

備考

ExecuteStreamの動作はXmlCommandTypeプロパティ値によって異なります。

  • XmlCommandType = OracleXmlCommandType.None

    ExecuteStreamは、InvalidOperationExceptionをスローします。

  • XmlCommandType = OracleXmlCommandType.Query

    ExecuteStreamでは、CommandTextプロパティの選択文を実行し、成功した場合は、生成されたXML文書を含むOracleClobオブジェクトを戻します。OracleClobにはUnicode文字が含まれます。

    SQL問合せによって行が戻されない場合、ExcecuteStreamでは、空のXML文書を含むOracleClobオブジェクトを戻します。

  • XmlCommandType = OracleXmlCommandType.InsertOracleXmlCommandType.UpdateまたはOracleXmlCommandType.Delete

    CommandTextプロパティの値はXML文書です。ExecuteStreamでは、そのXML文書内のデータをXmlSavePropertiesプロパティで指定されている表またはビューに保存し、空のOracleClobが戻されます。

ExecuteToStream

このメソッドでは、XmlCommandTypeプロパティとCommandTextプロパティを使用してコマンドを実行し、結果をアプリケーションによって指定された既存のStreamにXML文書として追加します。

宣言

// C#
public void ExecuteToStream(Stream outputStream);

パラメータ

  • outputStream

    Stream

備考

ExecuteToStreamの動作はXmlCommandTypeプロパティ値によって異なります。

  • XmlCommandType = OracleXmlCommandType.None

    ExecuteToStreamでは、InvalidOperationExceptionをスローします。

  • XmlCommandType = OracleXmlCommandType.Query

    ExecuteToStreamでは、CommandTextプロパティの選択文を実行し、成功した場合は指定したStreamに生成されたXML文書を追加します。

    SQL問合せによって行が戻されない場合は、指定されたStreamには何も追加されません。追加されたデータのキャラクタ・セットはUnicodeです。

  • XmlCommandType = OracleXmlCommandType.InsertOracleXmlCommandType.UpdateまたはOracleXmlCommandType.Delete

    CommandTextプロパティの値はXML文書です。ExecuteToStreamでは、そのXML文書の変更をXmlSavePropertiesプロパティで指定されている表またはビューに保存します。指定されたStreamには何も追加されません。

ExecuteXmlReader

このメソッドは、XmlCommandTypeおよびCommandTextプロパティを使用してコマンドを実行し、結果をXML文書として.NET XmlTextReaderオブジェクトに戻します。

宣言

// C#
public XmlReader ExecuteXmlReader();

戻り値

XmlReader

備考

ExecuteXmlReaderの動作は、XmlCommandTypeプロパティ値により次のように異なります。

  • XmlCommandType = OracleXmlCommandType.None

    ExecuteStreamは、InvalidOperationExceptionをスローします。

  • XmlCommandType = OracleXmlCommandType.Query

    ExecuteXmlReaderは、CommandTextプロパティ内のSELECT文を実行します。正常に実行されると、生成されたXML文書を含む.NET XmlTextReaderオブジェクトが戻されます。

    XML文書が空の場合(SQL問合せで戻される行がない場合に発生する可能性があります)、空の.NET XmlTextReaderオブジェクトが戻されます。

  • XmlCommandType = OracleXmlCommandType.InsertOracleXmlCommandType.UpdateまたはOracleXmlCommandType.Delete

    CommandTextプロパティの値はXML文書であり、ExecuteXmlReaderは、そのXML文書内の変更をXmlSavePropertiesプロパティで指定された表またはビューに保存します。空の.NET XmlTextReaderオブジェクトが戻されます。