ヘッダーをスキップ
Oracle Data Provider for .NET開発者ガイド
10g リリース2(10.2.0.2)
B31247-01
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

OracleCommandクラス

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

クラスの継承

System.Object

  System.MarshalByRefObject

    System.ComponentModel.Component

      System.Data.Common.DbCommand(ADO.NET 2.0のみ)

        Oracle.DataAccess.Client.OracleCommand

宣言

// ADO.NET 2.0: C#
public sealed class OracleCommand : DbCommand, ICloneable

// ADO.NET 1.x: C#
public sealed class OracleCommand : Component, IDbCommand, ICloneable

スレッド安全性

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

備考

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

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

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

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

要件

ネームスペース: Oracle.DataAccess.Client

アセンブリ: Oracle.DataAccess.dll

Microsoft .NET Frameworkバージョン: 1.xまたは2.0


OracleCommandメンバー

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

OracleCommandコンストラクタ

OracleCommandコンストラクタのリストを、表5-1に示します。

表5-1 OracleCommandコンストラクタ

コンストラクタ 説明

OracleCommandコンストラクタ

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


OracleCommand静的メソッド

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

表5-2 OracleCommand静的メソッド

メソッド 説明

Equals

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


OracleCommandプロパティ

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

表5-3 OracleCommandプロパティ

名前 説明

AddRowid

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

AddToStatementCache


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

ArrayBindCount

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

BindByName

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

CommandText

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

CommandTimeout


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

CommandType

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

Connection

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

Container

System.ComponentModel.Componentからの継承

DesignTimeVisible


OracleCommandオブジェクトがデザイナ・コントロール上に表示されるかどうかを指定します。

FetchSize

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

InitialLOBFetchSize

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

InitialLONGFetchSize

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

Notification


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

NotificationAutoEnlist


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

パラメータ

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

RowSize

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

Site

System.ComponentModel.Componentからの継承

Transaction

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

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

UpdatedRowSource

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

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

XmlCommandType

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

XmlQueryProperties

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

XmlSaveProperties

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


OracleCommandパブリック・メソッド

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

表5-4 OracleCommandパブリック・メソッド

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

Cancel


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

Clone

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

CreateObjRef

System.MarshalByRefObjectからの継承

CreateParameter

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

Dispose

System.ComponentModel.Componentからの継承

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クラスの新規インスタンスが作成されます。

宣言

// C#
public OracleCommand();

備考

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

OracleCommand(String)

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

宣言

// C#
public OracleCommand(string cmdText);

パラメータ

OracleCommand(string, OracleConnection)

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

宣言

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

パラメータ


OracleCommand静的メソッド

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

表5-5 OracleCommand静的メソッド

メソッド 説明

Equals

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



OracleCommandプロパティ

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

表5-6 OracleCommandプロパティ

名前 説明

AddRowid


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

AddToStatementCache


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

ArrayBindCount

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

BindByName

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

CommandText

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

CommandTimeout


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

CommandType

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

Connection

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

Container

System.ComponentModel.Componentからの継承

DesignTimeVisible


OracleCommandオブジェクトがデザイナ・コントロール上に表示されるかどうかを指定します。

FetchSize

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

InitialLOBFetchSize

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

InitialLONGFetchSize

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

Notification


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

NotificationAutoEnlist


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

パラメータ

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

RowSize

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

Site

System.ComponentModel.Componentからの継承

Transaction


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

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

UpdatedRowSource


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

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

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以外の任意の値に対して設定されている場合は、このプロパティは無視されます。

BindByName

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

宣言

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

プロパティ値

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

備考

デフォルト = false

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

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

CommandText

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

宣言

// ADO.NET 2.0: C#
public override string CommandText {get; set;}

// ADO.NET 1.x: C#
public string CommandText {get; set;}

プロパティ値

string

実装

IDbCommand

備考

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

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

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

CommandTimeout

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

宣言

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

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

プロパティ値

int

実装

IDbCommand.CommandTimeout

例外

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

備考

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

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

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


参照:


CommandType

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

宣言

// ADO.NET 2.0: C#
public override CommandType CommandType {get; set;}

// ADO.NET 1.x: C#
public CommandType {get; set;}

プロパティ値

CommandType

例外

ArgumentException: 値が有効なCommandTypeCommandType.TextCommandType.StoredProcedureCommandType.TableDirectなど)ではありません。

備考

デフォルト = 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値は無効です。

備考

デフォルト = 65536

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

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

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データ全体がプリフェッチされ、フェッチ配列に格納されます。OracleDataReaderGetStringGetCharsまたはGetBytesをコールすると、データ全体を検索できます。この場合、次のメソッドは無効になります。

この機能は、Oracle Database 9iリリース2(9.2)以上からデータを取得する際に動作します。

デフォルト = 0

Oracle Database 10gリリース2(10.2)以降:

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

Oracle Database 10gリリース2(10.2)より前は、InitialLOBFetchSizeがゼロ以外の値に設定されている場合、GetOracleBlobおよびGetOracleClobメソッドは無効でした。BLOBおよびCLOBのデータは、GetBytesおよびGetCharsメソッドをそれぞれ使用してフェッチされました。Oracle Database 10gリリース2(10.2)では、この制限は存在しません。GetOracleBlob およびGetOracleClobメソッドは、InitialLOBFetchSize値がゼロ以上のすべての値に使用できます。

Oracle Database 10gリリース2(10.2)より前のリリース:

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

指定されたInitialLOBFetchSizeの値より多くフェッチするには、次のうちの1つが選択リストにある必要があります。

このプロパティが0に設定されている場合は、前述のいずれも不要になります。

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つが選択リストにある必要があります。

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

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

デフォルト= 0

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

Notification

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

宣言

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

プロパティ値

コマンドの通知要求

備考

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

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

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

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

問合せにROWID列が明示的に含まれている場合(またはAddRowidプロパティがtrueに設定されている場合)、OracleDependency.OnChangeイベントが起動されると、行ID情報がOracleNotificationArgs.Detailsプロパティに移入されます。

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()の前に設定する必要があることに注意してください。

Transaction

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

宣言

// C#
public OracleTransaction Transaction {get;}

プロパティ値

OracleTransaction

実装

IDbCommand

備考

デフォルト値 = null

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


注意:

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

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

常にnullを戻します。

UpdatedRowSource

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

宣言

// ADO.NET 2.0: C#
public override UpdateRowSource UpdatedRowSource {get; set;}

// ADO.NET 1.x: C#
public UpdateRowSource UpdatedRowSource {get; set;}

プロパティ値

UpdateRowSource

実装

IDbCommand

例外

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

備考

常にUpdateRowSourceを戻します。

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

XmlCommandType

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

宣言

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

プロパティ値

OracleXmlCommandType

備考

デフォルト値は、None

XmlCommandType値と使用方法

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パブリック・メソッドのリストを、表5-7に示します。

表5-7 OracleCommandパブリック・メソッド

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

Cancel


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

Clone

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

CreateObjRef

System.MarshalByRefObjectからの継承

CreateParameter

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

Dispose

System.ComponentModel.Componentからの継承

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

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

宣言

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

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

実装

IDbCommand.Cancel

備考

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

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

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

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

現在の実行がいつ終了するかは不明確であるため、非原子的なSQLまたはPL/SQLの実行はトランザクション内で開始することをお薦めします。コマンドの実行が例外ORA-01013: user requested cancel of current operationで正しく終了した場合、トランザクションをロールバックしてデータの整合性を保つことができます。非原子的な実行の例としては、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

ExecuteNonQuery

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

宣言

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

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

戻り値

影響を受ける行数

実装

IDbCommand

例外

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

備考

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

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

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

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オブジェクトを戻します。

宣言

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

パラメータ

戻り値

OracleDataReader

実装

IDbCommand

例外

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

備考

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

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

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

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

宣言

// ADO.NET 2.0: C#
public override object ExecuteScalar();

// ADO.NET 1.x: C#
public object ExecuteScalar();

戻り値

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

実装

IDbCommand

例外

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

備考

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

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

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

// 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プロパティ値によって異なります。

要件

リリース8.1.7および9.0.1のデータベースのみ: このメソッドでは、Oracle XML Developer's Kit(Oracle XDK)リリース9.2以上をデータベースにインストールする必要があります。Oracle XDKはOracle Technology Network(OTN)からダウンロードできます。

ExecuteToStream

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

宣言

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

パラメータ

備考

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

要件

リリース8.1.7および9.0.1のデータベースのみ: このメソッドでは、Oracle XML Developer's Kit(Oracle XDK)リリース9.2以上をデータベースにインストールする必要があります。Oracle XDKはOracle Technology Network(OTN)からダウンロードできます。

ExecuteXmlReader

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

宣言

// C#
public XmlReader ExecuteXmlReader();

戻り値

XmlReader

備考

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

要件

リリース8.1.7および9.0.1のデータベースのみ: このメソッドでは、Oracle XML Developer's Kit(Oracle XDK)リリース9.2以上をデータベースにインストールする必要があります。Oracle XDKはOracle Technology Network(OTN)からダウンロードできます。