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オブジェクトの状態に反映されないため、お薦めできません。
ExecuteXmlReader、ExecuteStreamおよび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コンストラクタを、表6-6にリストします。
OracleCommand静的メソッド
OracleCommand静的メソッドを、表6-7にリストします。
OracleCommandプロパティ
OracleCommandプロパティを、表6-8にリストします。
表6-8 OracleCommandプロパティ
| プロパティ | 説明 |
|---|---|
|
選択リストの一部として |
|
|
|
プロパティが |
|
配列バインディング機能を使用するかどうか、また |
|
|
配列バインディングを使用したDMLの実行中に各操作で影響を受ける行数を戻します |
|
|
コレクションのバインディング・メソッドを指定します |
|
|
Oracle Databaseに対して実行するSQL文やストアド・プロシージャ、またはOracle Databaseに対する変更の格納に使用するXMLデータを指定します |
|
|
|
例外で実行を終了するまでコマンドの実行を可能にする秒数を指定します |
|
|
|
|
コマンドを実行するための接続の識別に使用される |
|
|
|
|
|
|
|
|
結果セット・データを格納する |
|
|
|
ストアド・プロシージャで戻される暗黙的結果セットにマップする ODP.NET管理対象ドライバでは使用できません |
|
LOB列について |
|
|
|
|
|
|
コマンドに通知要求があることを示します |
|
|
コマンド実行時に、連続問合せ通知がデータベースに自動登録されるかどうかを示します |
|
SQL文またはストアド・プロシージャのパラメータを指定します |
|
|
|
|
|
Site |
|
|
.NETストアド・プロシージャではサポートされません |
|
|
問合せコマンドの結果が、更新されている列にどのように適用されるかを指定します .NETストアド・プロシージャではサポートされません |
|
|
コマンド・オブジェクトがEntity Data Modelマッピング構成値を使用するかどうかを指定します。 |
|
|
ODP.NET管理対象ドライバでは使用できません |
|
|
SQL問合せ文の結果セットからXML文書が作成される場合に使用されるプロパティを指定します ODP.NET管理対象ドライバでは使用できません |
|
|
データベースに対する変更の保存にXML文書が使用される場合のプロパティを指定します ODP.NET管理対象ドライバでは使用できません |
OracleCommandパブリック・メソッド
OracleCommandパブリック・メソッドを、表6-9にリストします。
表6-9 OracleCommandパブリック・メソッド
| パブリック・メソッド | 説明 |
|---|---|
|
|
特定の接続で現在実行されているコマンドの取消しを試行します |
|
|
|
|
|
|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
|
|
|
|
|
|
コマンドを実行します(オーバーロード) |
|
|
問合せにより戻された結果セットの最初の行の最初の列を戻します |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
このメソッドは操作不能です |
|
|
|
OracleCommandコンストラクタでは、OracleCommandクラスの新規インスタンスが作成されます。
オーバーロード・リスト:
このコンストラクタでは、OracleCommandクラスの新規インスタンスが作成されます。
このコンストラクタでは、指定されたSQLコマンドまたはストアド・プロシージャおよびOracle Databaseへの接続を使用して、OracleCommandクラスの新規インスタンスをインスタンス化します。
OracleCommand(string, OracleConnection)
このコンストラクタでは、指定されたSQLコマンドまたはストアド・プロシージャおよびOracle Databaseへの接続を使用して、OracleCommandクラスの新規インスタンスをインスタンス化します。
このコンストラクタでは、OracleCommandクラスの新規インスタンスが作成されます。
宣言
// C# public OracleCommand();
備考
デフォルトのコンストラクタ
このコンストラクタでは、指定されたSQLコマンドまたはストアド・プロシージャおよびOracle Databaseへの接続を使用して、OracleCommandクラスの新規インスタンスをインスタンス化します。
宣言
// C#
public OracleCommand(string cmdText);
パラメータ
cmdText
実行されるSQLコマンドまたはストアド・プロシージャ
このコンストラクタでは、指定されたSQLコマンドまたはストアド・プロシージャおよびOracle Databaseへの接続を使用して、OracleCommandクラスの新規インスタンスをインスタンス化します。
宣言
// C# public OracleCommand(string cmdText, OracleConnection OracleConnection);
パラメータ
cmdText
実行されるSQLコマンドまたはストアド・プロシージャ
OracleConnection
Oracle Databaseへの接続
OracleCommandプロパティを、表6-11にリストします。
表6-11 OracleCommandプロパティ
| プロパティ | 説明 |
|---|---|
|
|
選択リストの一部として |
|
|
プロパティが |
|
配列バインディング機能を使用するかどうか、また |
|
|
配列バインディングを使用したDMLの実行中に各操作で影響を受ける行数を戻します |
|
|
コレクションのバインディング・メソッドを指定します |
|
|
Oracle Databaseに対して実行するSQL文やストアド・プロシージャ、またはOracle Databaseに対する変更の格納に使用するXMLデータを指定します |
|
|
|
例外で実行を終了するまでコマンドの実行を可能にする秒数を指定します |
|
|
|
|
コマンドを実行するための接続の識別に使用される |
|
|
Container |
|
|
|
|
|
結果セット・データを格納する |
|
|
|
ストアド・プロシージャで戻される暗黙的結果セットにマップする ODP.NET管理対象ドライバでは使用できません |
|
LOB列について |
|
|
|
|
|
|
コマンドに通知要求があることを示します |
|
|
コマンド実行時に、連続問合せ通知がデータベースに自動登録されるかどうかを示します |
|
SQL文またはストアド・プロシージャのパラメータを指定します |
|
|
|
|
|
Site |
|
|
|
.NETストアド・プロシージャではサポートされません |
|
|
問合せコマンドの結果が、更新されている列にどのように適用されるかを指定します .NETストアド・プロシージャではサポートされません |
|
|
コマンド・オブジェクトがEntity Data Modelマッピング構成値を使用するかどうかを指定します。 |
|
|
|
|
SQL問合せ文の結果セットからXML文書が作成される場合に使用されるプロパティを指定します |
|
|
データベースに対する変更の保存にXML文書が使用される場合のプロパティを指定します |
このプロパティでは、選択リストの一部としてROWIDを追加します。
宣言
// C#
public bool AddRowid {get; set;}
プロパティ値
bool
備考
デフォルトはfalse
このROWID列は非表示で、アプリケーションでアクセスすることはできません。表のROWIDにアクセスするには、このプロパティを使用しないでROWIDを明示的に選択リストに追加する必要があります。
|
関連項目:
|
このプロパティが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();
}
}
このプロパティでは、配列バインド機能を使用するかどうかを指定し、OracleParameter Valueプロパティでバインドされる配列要素数を指定します。
宣言
// C#
public int ArrayBindCount {get; set;}
プロパティ値
OracleParameter Valueプロパティでバインドされる配列要素数を指定する整数
例外
ArgumentException - 指定されたArrayBindCount値が無効
備考
デフォルト = 0
ArrayBindCountが0の場合は、配列バインドは使用されません。それ以外の場合は、配列バインドが使用されOracleParameter Valueプロパティが値の配列として解釈されます。配列バインド機能を使用する場合は、ArrayBindCountの値を指定する必要があります。
DbTypeとOracleDbTypeのどちらも設定されていない場合は、OracleParameter Valueプロパティを設定する前にArrayBindCountを設定して、ValueからのDbTypeおよびOracleDbTypeの判断が正しくできるようにすることをお薦めします。
デフォルトでは配列バインドは使用されません。
XmlCommandTypeプロパティがNone以外の任意の値に対して設定されている場合は、このプロパティは無視されます。
このプロパティは、配列バインディングを使用したDMLの実行中に各操作で影響を受ける行数を戻します。
宣言
// C# public long[] ArrayBindRowsAffected ;
プロパティ値
long型
このプロパティでは、コレクションのバインド・メソッドを指定します。
宣言
// C#
public bool BindByName {get; set;}
プロパティ値
パラメータが名前別にバインドされる場合はtrueを戻し、位置別にバインドされる場合はfalseを戻します。
備考
デフォルト = false
次の条件の場合、BindByNameは無視されます。
XmlCommandTypeプロパティの値が、Insert、UpdateまたはDeleteの場合
XmlCommandTypeプロパティの値がQueryであるが、OracleCommandにパラメータが設定されていない場合
XmlCommandTypeプロパティがOracleXmlCommandType.Queryで、任意のパラメータがOracleCommandで設定されている場合は、BindByNameプロパティをtrueに設定する必要があります。それ以外の場合は、次のOracleCommandメソッドではInvalidOperationExceptionをスローします。
ExecuteNonQuery
ExecuteXmlReader
ExecuteStream
ExecuteToStream
このプロパティでは、Oracle Databaseに対して実行するSQL文またはストアド・プロシージャ、またはOracle Databaseの変更を格納する際に使用するXMLデータを指定します。
宣言
// C#
public override string CommandText {get; set;}
プロパティ値
string
実装
IDbCommand
備考
デフォルトは空の文字列です。
CommandTypeプロパティがStoredProcedureに設定されると、CommandTextプロパティはストアド・プロシージャの名前に設定されます。Executeメソッドが呼び出されると、コマンドはこのストアド・プロシージャを呼び出します。
CommandTextのXmlCommandType値への影響は次のとおりです。
XmlCommandType = None。
CommandTypeプロパティによってCommandTextの内容が決まります。
XmlCommandType = Query。
CommandTextはSQL問合せである必要があります。SQL問合せは選択文である必要があります。CommandTypeプロパティは無視されます。
XmlCommandTypeプロパティは、Insert、UpdateまたはDeleteです。
CommandTextはXML文書である必要があります。CommandTypeプロパティは無視されます。
このプロパティは、コマンドが例外で実行を終了するまでに実行可能な最小秒数を指定します。
宣言
// 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オブジェクトでタイムアウトが発生すると、その接続上の他の実行が終了する可能性があります。OracleCommandのCommandTimeoutプロパティの値が0より大きく設定されている場合、OracleCommandのタイムアウトの際に、該当するコマンド実行のみが取り消されるようにするには、各接続でOracleCommandを1つのみ使用するようにします。
|
関連項目:
|
このプロパティでは、CommandTextプロパティの解釈の方法を示すコマンド・タイプを指定します。
宣言
// C#
public override CommandType CommandType {get; set;}
プロパティ値
CommandType
例外
ArgumentException: CommandType.Text、CommandType.StoredProcedure、CommandType.TableDirectなどのように、この値は無効なCommandTypeです。
備考
デフォルト = CommandType.Text
XmlCommandTypeプロパティの値がNoneではない場合は、CommandTypeプロパティは無視されます。
このプロパティでは、コマンドを実行する接続の識別に使用されるOracleConnectionオブジェクトを指定します。
宣言
// C#
public OracleConnection Connection {get; set;}
プロパティ値
OracleConnectionオブジェクト
実装
IDbCommand
備考
デフォルト = null
このプロパティは、OracleCommandオブジェクトが設計者の制御で表示できるかどうか指定します。
宣言
// C#
public override bool DesignTimeVisible { get; set; }
プロパティ値
OracleCommandオブジェクトが制御により表示できるかどうかを示す値。デフォルトはtrueです。
備考
開発者はこのプロパティを使用してOracleCommandオブジェクトが制御により表示できるかどうかを示します。
このプロパティは、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プロパティによって算定されます。
このプロパティは、OracleRefCursorsの配列を戻します(それぞれのOracleRefCursorは、ストアド・プロシージャで戻される暗黙的結果セットにマップされます)。
宣言
// C#
public OracleRefCursor[] ImplicitRefCursors {get; set;}
プロパティ値
OracleRefCursorsの配列
備考
このプロパティが移入されるのは、ExecuteNonQueryを通じてストアド・プロシージャが実行されるときのみです(他のシナリオで移入されることはありません)。
このプロパティは、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を取得できます。
|
関連項目:
|
このプロパティでは、OracleDataReaderがLONGおよび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データ全体がプリフェッチされ、フェッチ配列に格納されます。OracleDataReaderのGetString、GetCharsまたはGetBytesをコールすると、データ全体を検索できます。
デフォルト = 0
このプロパティを0に設定すると、そのプロパティがアプリケーションにより要求されるまでLONGおよびLONG RAWデータの検索全体が延期されます。
このインスタンス・プロパティは、コマンドに通知要求があることを示します。
宣言
// C#
public OracleNotificationRequest Notification {set; get;}
プロパティ値
コマンドの通知要求
備考
最初の変更通知が登録されると、クライアント・リスナーが開始され、データベース通知を受け取れるようになります。リスナーでは、OracleDependency.Port静的フィールドで定義されているポート番号が使用されます。後続の変更通知登録では、同じクライアント・プロセス内の同じリスナーが使用され、別のリスナーは開始されません。
NotificationがOracleNotificationRequestインスタンスに設定されている場合は、コマンドの実行時に通知登録が作成されます(まだ作成されていない場合)。登録の作成後は、OracleNotificationRequestインスタンスのプロパティは変更できません。通知登録がすでに作成されている場合は、コマンドに関連付けられている結果セットが既存の登録に追加されます。
Notificationがnullに設定されている場合、後続コマンドの実行に通知要求は不要になります。通知要求が不要な場合は、Notificationプロパティをnullに設定するか、NotificationAutoEnlistプロパティをfalseに設定します。
連続問合せ通知の場合、通知要求は複数のコマンドの実行に使用できます。その場合、異なるコマンドに関連する問合せ結果セットを同じ登録内で無効にすることができます。
OracleDependency.OnChangeイベントが実行される際に、ROWID列が明示的に問合せに含まれる(または、AddRowidプロパティがtrueに設定される)場合は、Rowid列にOracleNotificationEventArgs.Detailsプロパティが参照するDataTable内のROWID値が含まれます。OracleDependency.RowidInfoをOracleRowidInfo.IncludeまたはOracleRowidInfo.Excludeにそれぞれ設定して、OracleNotificationEventArgs内のROWID値を含めるか含めないかを明示的に要求することで、この動作をオーバーライドできます。
このインスタンス・プロパティは、コマンドの実行時に連続問合せ通知がデータベースに自動登録されるかどうかを示します。
宣言
// C#
public bool NotificationAutoEnlist {set; get;}
プロパティ値
コマンドの実行時に自動的に連続問合せ通知要求が作成されるかどうかを示すbool値。NotificationAutoEnlistがtrueに設定されていて、Notificationプロパティが適切に設定されている場合は、連続問合せ通知要求が自動登録されます(それ以外の場合、連続問合せ通知は登録されません)。
デフォルト値: true
備考
通知要求は、同じOracleCommandインスタンスを使用する複数のコマンドの実行に使用できます。その場合には、NotificationAutoEnlistプロパティをtrueに設定します。
このプロパティは、SQL文またはストアド・プロシージャのパラメータを指定します。
宣言
// C#
public OracleParameterCollection Parameters {get;}
プロパティ値
OracleParameterCollection
実装
IDbCommand
備考
デフォルト値 = 空のコレクション
コレクション内のパラメータ数は、コマンド・テキスト内のパラメータ・プレースホルダの数と同じである必要があります。同じでない場合は、エラーが発生します。
コマンド・テキストにパラメータ・トークン(たとえば、:1,:2など)が含まれていない場合、Parametersプロパティ内の値は無視されます。
このプロパティは、OracleDataReader内部キャッシュがデータの1行を保存するために必要とするメモリー量を指定します。
宣言
// C#
public long RowSize {get;}
プロパティ値
longは、OracleDataReaderが実行された問合せのデータ1行を格納するために必要とするメモリー量(バイト)を示します。
備考
デフォルト値 = 0
RowSizeプロパティは、結果セットを戻すコマンドの実行後、ゼロ以外の値に設定されます。このプロパティは、行数に基づいてFetchSizeを設定する場合に、設計時または実行時に動的に使用できます。たとえば、OracleDataReaderを有効にして、データベース・ラウンドトリップごとにN行をフェッチするには、OracleDataReaderのFetchSizeプロパティをRowSize * Nに動的に設定できます。FetchSizeを適切に有効化するには、OracleCommand.ExecuteReader()の後に設定し、かつOracleDataReader.Read()の前に設定する必要があることに注意してください。
ODP.NETのRowSize値の計算では、現在、VARCHAR2型、NVARCHAR2型、RAW型の列について、32Kまでの値をサポートしています。
このプロパティは、OracleCommandの実行対象となるOracleTransactionオブジェクトを指定します。
宣言
// C#
public OracleTransaction Transaction {set; get;}
プロパティ値
OracleTransaction
実装
IDbCommand
備考
デフォルト値 = null
Transactionは、OracleCommand接続オブジェクトに関連付けられたトランザクション・オブジェクトへの参照を戻します。そのため、現在接続を実行しているすべてのトランザクションのコンテキストにおいても、コマンドが実行されます。
|
注意: このプロパティがIDbCommand参照でアクセスされた場合、その一連のアクセッサ・メソッドは操作できません。 |
備考(.NETストアド・プロシージャ)
常にnullを戻します。
このプロパティは、問合せコマンドの結果が、更新される行にどのように適用されるかを指定します。
宣言
// C#
public override UpdateRowSource UpdatedRowSource {get; set;}
プロパティ値
UpdateRowSource
実装
IDbCommand
例外
ArgumentException - 指定されたUpdateRowSource値が無効です。
備考
常にUpdateRowSourceを戻します。
値がUpdateRowSource.None以外の場合、SetアクセッサはArgumentExceptionをスローします。
このプロパティは、OracleCommandオブジェクトがEntity Data Modelマッピング構成値を使用するかどうかを指定します。
宣言
// C# public bool UseEdmMapping
プロパティ値
bool
備考
デフォルトはfalse
UseEdmMappingプロパティを使用すると、OracleCommandオブジェクトがEntity Data Modelマッピング構成値を使用することを明示的に指定できます。これにより、Entity Frameworkの複数結果セットの機能を使用できます。
このプロパティは、OracleCommandのXML操作のタイプを指定します。
宣言
// C#
public OracleXmlCommandType XmlCommandType {get; set;}
プロパティ値
OracleXmlCommandType
備考
デフォルト値は、None
XmlCommandType値と使用方法
None - CommandTypeプロパティは、操作のタイプを指定します。
Query - CommandTextプロパティは、SQL SELECT文に設定する必要があります。問合せが実行され、結果がXML文書として戻されます。CommandText内のSQL SELECT文およびXmlQueryPropertiesプロパティにより指定されたプロパティは、操作の実行に使用されます。CommandTypeプロパティは無視されます。
Insert、UpdateまたはDelete - CommandTextプロパティは、変更の対象を含むXML文書です。CommandText内のXML文書およびXmlSavePropertiesプロパティにより指定されたプロパティは、操作の実行に使用されます。CommandTypeプロパティは無視されます。
このプロパティは、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()メソッドを使用します。
このプロパティを使用して、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パブリック・メソッドを、表6-12にリストします。
表6-12 OracleCommandパブリック・メソッド
| パブリック・メソッド | 説明 |
|---|---|
|
|
特定の接続で現在実行されているコマンドの取消しを試行します |
|
|
|
|
|
|
|
|
|
|
|
オブジェクトにより割り当てられたリソースまたはメモリーを解除します |
|
|
|
|
|
|
|
コマンドを実行します(オーバーロード) |
|
|
問合せにより戻された結果セットの最初の行の最初の列を戻します |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
System. |
|
|
|
|
|
|
|
|
このメソッドは操作不能です |
|
|
|
このメソッドは、特定の接続で現在実行されているコマンドの取消しを試みます。
宣言
// 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());
}
}
}
|
関連項目:
|
このメソッドでは、OracleCommandオブジェクトのコピーを作成します。
宣言
// C# public object Clone();
戻り値
OracleCommandオブジェクト
実装
ICloneable
備考
複製されたオブジェクトのプロパティ値は、複製元のオブジェクトのプロパティ値と同じです。
このメソッドでは、OracleParameterクラスの新規インスタンスを作成します。
宣言
// C# public OracleParameter CreateParameter();
戻り値
デフォルト値の新規OracleParameter
実装
IDbCommand
このメソッドでは、オブジェクトにより割り当てられたリソースまたはメモリーを解除します。
宣言
// C# public void Dispose();
実装
IDisposable
備考
Disposeメソッドでは、OracleCommandオブジェクトもクローズします。
このメソッドでは、XmlCommandTypeプロパティおよびCommandTextプロパティを使用してSQL文またはコマンドを実行し、影響を受ける行数を戻します。
宣言
// C# public override int ExecuteNonQuery();
戻り値
影響を受ける行数
実装
IDbCommand
例外
InvalidOperationException - コマンドを実行できない場合
備考
ExecuteNonQueryでは、次の場合に影響を受ける行数を戻します。
コマンドが、UPDATE、INSERTまたはDELETEで、XmlCommandTypeプロパティがOracleXmlCommandType.Noneに設定されている場合。
XmlCommandTypeプロパティが、OracleXmlCommandType.Insert、OracleXmlCommandType.Update、OracleXmlCommandType.Deleteに設定されている場合。
その他のすべての文のタイプに対する戻り値は-1です。
ExecuteNonQueryは次のいずれかに対して使用されます。
カタログ操作(データベース構造の問合せまたは表などのデータベース・オブジェクトの作成など)。
UPDATE、INSERTまたはDELETE文の実行による、DataSetを使用しないデータベース内のデータ変更。
XML文書を使用したデータベース内のデータ変更。
ExecuteNonQueryでは、行を戻しませんが、任意の出力パラメータを移入したりまたはパラメータにマップされる値のデータを戻します。
XmlCommandTypeプロパティがOracleXmlCommandType.Queryに設定されている場合、ExecuteNonQueryはCommandTextプロパティ内の選択文を実行し、成功した場合-1を戻します。生成されるXML文書は廃棄されます。これは、結果としてXML文書を戻さないで操作が正常に完了するかどうかを判別する場合に便利です。
XmlCommandTypeプロパティが、OracleXmlCommandType.Insert、OracleXmlCommandType.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では、CommandTextで指定されたコマンドを実行します。
このメソッドでは、CommandTextで指定されたコマンドを実行し、OracleDataReaderオブジェクトを戻します。
ExecuteReader(CommandBehavior)
このメソッドでは、CommandTextで指定されたコマンドを実行し、指定されたCommandBehavior値を使用してOracleDataReaderオブジェクトを戻します。
このメソッドでは、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.Insert、OracleXmlCommandType.Update、OracleXmlCommandType.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();
}
}
このメソッドでは、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.Insert、OracleXmlCommandType.Update、OracleXmlCommandType.DeleteまたはOracleXmlCommandType.Queryに設定されている場合、ExecuteReaderメソッドはInvalidOperationExceptionをスローします。
このメソッドでは、接続を使用して問合せを実行し、問合せによって戻された結果セット内の最初の行の最初の列を戻します。
宣言
// C# public override object ExecuteScalar();
戻り値
最初の行、最初の列の値を表すオブジェクト
実装
IDbCommand
例外
InvalidOperationException - コマンドを実行できない場合
備考
追加列または行は無視されます。ExecuteScalarでは、データベースから単一値(たとえば集合値)を取り出します。ExecuteReader()メソッドを使用する場合より少ないコードで済み、必要な操作を実行してOracleDataReaderによって戻されたデータで単一値を生成します。
問合せで行を戻さない場合は、nullを戻します。
XmlCommandTypeプロパティの値が次のいずれかに設定されている場合、ExecuteScalarメソッドがInvalidOperationExceptionをスローします。OracleXmlCommandType値: Insert、Update、Delete、Query。
例
// 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();
}
}
このメソッドでは、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.Insert、OracleXmlCommandType.UpdateまたはOracleXmlCommandType.Delete
CommandTextプロパティの値はXML文書です。ExecuteStreamでは、そのXML文書内のデータをXmlSavePropertiesプロパティで指定されている表またはビューに保存し、空のOracleClobが戻されます。
|
関連項目: |
このメソッドでは、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.Insert、OracleXmlCommandType.UpdateまたはOracleXmlCommandType.Delete
CommandTextプロパティの値はXML文書です。ExecuteToStreamでは、そのXML文書の変更をXmlSavePropertiesプロパティで指定されている表またはビューに保存します。指定されたStreamには何も追加されません。
このメソッドは、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.Insert、OracleXmlCommandType.UpdateまたはOracleXmlCommandType.Delete
CommandTextプロパティの値はXML文書であり、ExecuteXmlReaderは、そのXML文書内の変更をXmlSavePropertiesプロパティで指定された表またはビューに保存します。空の.NET XmlTextReaderオブジェクトが戻されます。