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

戻る
戻る
 
次へ
次へ
 

OracleDependencyクラス

OracleDependencyクラスは、アプリケーションとOracle Database間の依存性を表します。これを使用して、アプリケーションでは、関心のあるデータまたはOracle Databaseの状態が変更されたときはいつでも通知を取得できます。

クラスの継承

System.Object

  Oracle.DataAccess.Client.OracleDependency

宣言

// C#
public sealed class OracleDependency

スレッド安全性

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

要件

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

アセンブリ: Oracle.DataAccess.dll

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

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


OracleDependencyメンバー

次の表に、OracleDependencyメンバーを示します。

OracleDependencyコンストラクタ

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

表8-1 OracleDependencyコンストラクタ

コンストラクタ 説明

OracleDependencyコンストラクタ

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


OracleDependency静的フィールド

OracleDependency静的フィールドのリストを、表8-2に示します。

表8-2 OracleDependency静的フィールド

静的フィールド 説明

Port


通知リスナーがデータベース通知をリスニングするポート番号を示します


OracleDependency静的メソッド

OracleDependency静的メソッドのリストを、表8-3に示します。

表8-3 OracleDependency静的メソッド

静的メソッド 説明

Equals

System.Objectからの継承

GetOracleDependency


指定された一意の識別子に基づいてOracleDependencyインスタンスを戻します


OracleDependencyプロパティ

OracleDependencyプロパティのリストを、表8-4に示します。

表8-4 OracleDependencyプロパティ

プロパティ 説明

DataSource


OracleDependencyインスタンスに関連付けられているデータ・ソースを示します

HasChanges


この依存性に関連付けられているデータベースに変更が加えられているかどうかを示します

Id


OracleDependencyインスタンスの一意の識別子を表します

IsEnabled


アプリケーションとデータベースの間で依存性が有効になっているかどうかを示します

QueryBasedNotification


変更通知登録がオブジェクト・ベースか問合せベースかを指定します

RegisteredQueryIDs


CHANGE_NOTIFICATION_QUERY_IDのリストを提供します

RegisteredResources


通知登録で登録されたデータベース・リソースを示します

UserName


OracleDependencyインスタンスに関連付けられているデータベース・ユーザー名を示します


OracleDependencyメソッド

OracleDependencyメソッドのリストを、表8-5に示します。

表8-5 OracleDependencyメソッド

メソッド 説明

AddCommandDependency


指定されたOracleCommandインスタンスにOracleDependencyインスタンスをバインドします

Equals

System.Objectからの継承

GetHashCode

System.Objectからの継承

GetType

System.Objectからの継承

RemoveRegistration


アプリケーションとデータベース間に指定されている依存性を削除します

ToString

System.Objectからの継承


OracleDependencyイベント

OracleDependencyイベントのリストを、表8-6に示します。

表8-6 OracleDependencyイベント

イベント 説明

OnChange


依存性に関連付けられているデータベース通知をデータベースから受信すると送信されるイベント



OracleDependencyコンストラクタ

OracleDependencyコンストラクタは、OracleDependencyクラスのインスタンスを作成します。

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

OracleDependency()

このコンストラクタは、OracleDependencyクラスのインスタンスを作成します。

宣言

// C#
public OracleDependency ()

備考

このコンストラクタを使用すると、OracleCommandインスタンスは新たに作成されたOracleDependencyインスタンスにバインドされません。バインドするには、AddCommandDependencyメソッドを使用します。


注意:

アプリケーションとデータベース間の依存性は、OracleDependencyインスタンスの作成時には確立されません。依存性は、関連付けられたコマンドの実行時に確立されます。

OracleDependency(OracleCommand)

このコンストラクタは、OracleDependencyクラスのインスタンスを作成し、OracleCommandインスタンスにバインドします。

宣言

// C#
public OracleDependency (OracleCommand cmd)

パラメータ

例外

ArgumentNullException: cmdパラメータがNULLです。

InvalidOperationException: 指定されたOracleCommandインスタンスには、すでに通知要求が含まれています。

備考

このOracleDependencyコンストラクタによりOracleCommandインスタンスがOracleDependencyインスタンスにバインドされると、OracleNotificationRequestインスタンスが作成され、OracleCommand.NotificationプロパティにそのOracleNotificationRequestインスタンスが設定されます。

Continuous Query Notificationは、コマンド実行時にデータベースに登録されます。任意のコマンド実行メソッド(ExecuteNonQueryExecuteReaderなど)により、通知要求が登録されます。OracleDependencyは、複数のOracleCommandにバインドできます。これらのOracleCommandオブジェクト文のいずれかが実行されると、関連付けられているOracleCommandにその文が登録されます。個々のOracleCommandの登録は個別に発生しますが、OracleDependencyが関連付けられているすべてのOracleCommandオブジェクトに対して発生する、通知の検出および送信は1つのOracleDependencyで行うことができます。OnChangeイベントのアプリケーションに渡されるOnChangeEventArgsでは、データベース内での変更に関する情報を提供します。

このコンストラクタによって作成されるOracleNotificationRequestインスタンスのプロパティのデフォルト値は、次のとおりです。

OracleDependency(OracleCommand, bool, int, bool)

このコンストラクタでは、OracleDependencyクラスのインスタンスを作成し、指定されたOracleCommandインスタンスにバインドします。このとき、通知時にその登録が削除されるかどうか、通知登録のタイムアウト値、および通知の継続期間を指定します。

宣言

// C#
public OracleDependency (OracleCommand cmd, bool isNotifiedOnce, long timeout,
  bool isPersistent)

パラメータ

例外

ArgumentNullException: cmdパラメータがNULLです。

ArgumentOutOfRangeException: 指定されたtimeoutが無効です。

InvalidOperationException: 指定されたOracleCommandインスタンスには、すでに通知要求が含まれています。

備考

このOracleDependencyコンストラクタによりOracleCommandインスタンスがOracleDependencyインスタンスにバインドされると、OracleNotificationRequestインスタンスが作成され、OracleCommand.NotificationプロパティにそのOracleNotificationRequestインスタンスが設定されます。

Continuous Query Notificationは、コマンド実行時にデータベースに登録されます。任意のコマンド実行メソッド(ExecuteNonQueryExecuteReaderなど)により、通知要求が登録されます。OracleDependencyは、複数のOracleCommandにバインドできます。これらのOracleCommandオブジェクト文のいずれかが実行されると、関連付けられているOracleCommandにその文が登録されます。個々のOracleCommandの登録は個別に発生しますが、OracleDependencyが関連付けられているすべてのOracleCommandオブジェクトに対して発生する、通知の検出および送信は1つのOracleDependencyで行うことができます。OnChangeイベントのアプリケーションに渡されるOnChangeEventArgsでは、データベース内での変更に関する情報を提供します。

このコンストラクタによって作成されるOracleNotificationRequestインスタンスのプロパティのデフォルト値は、次のとおりです。


OracleDependency静的フィールド

OracleDependency静的フィールドのリストを、表8-7に示します。

表8-7 OracleDependency静的フィールド

静的フィールド 説明

Port


通知リスナーがデータベース通知をリスニングするポート番号を示します


Port

この静的フィールドは、通知リスナーがデータベース通知をリスニングするポート番号を示します。

宣言

// C#
public static int Port{get; set}

プロパティ値

データベース通知をリスニングするポートの番号を表すint値。ポート番号が-1に設定されている場合、リスナーの開始時にランダムなポート番号が割り当てられます。それ以外の場合は、指定されたポート番号を使用してリスナーが開始されます。

例外

ArgumentOutOfRangeException: ポート番号が負の値に設定されています。

InvalidOperationException: リスナーが開始された後にポート番号が変更されようとしています。

備考

OracleDependency.Port静的フィールドで指定されるポート番号は、ODP.NETと同じアプリケーション・ドメイン内で実行される通知リスナーにより使用されます。このポート番号では、データベースからのContinuous Query Notificationを受信します。 1つの通知リスナーですべてのContinuous Query Notificationをリスニングできるため、通知リスナーはアプリケーション・ドメインごとに1つのみ作成されます。

OracleDependencyオブジェクトに関連付けられているコマンドがアプリケーション・ドメインの存続中に初めて実行されたときに、通知リスナーが作成されます。OracleDependency.Port静的フィールドで指定されたポート番号は、その存続期間を通じてリスナーにより、使用されます。OracleDependency.Port静的フィールドは通知リスナーの作成後に変更できますが、変更しても通知リスナーがリスニングする実際のポート番号には影響しません。


OracleDependency静的メソッド

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

表8-8 OracleDependency静的メソッド

静的メソッド 説明

Equals

System.Objectからの継承

GetOracleDependency


指定された一意の識別子に基づいてOracleDependencyインスタンスを戻します


GetOracleDependency

この静的メソッドでは、指定された一意の識別子に基づいてOracleDependencyインスタンスを戻します。

宣言

// C#
public static OracleDependency GetOracleDependency(string guid)

パラメータ

例外

ArgumentException: 指定された一意識別子は、OracleDependencyインスタンスを見つけられません。

戻り値

指定されたguidパラメータを持つOracleDependencyインスタンス。


OracleDependencyプロパティ

OracleDependencyプロパティのリストを、表8-9に示します。

表8-9 OracleDependencyプロパティ

プロパティ 説明

DataSource


OracleDependencyインスタンスに関連付けられているデータ・ソースを示します

HasChanges


この依存性に関連付けられているデータベースに変更が加えられているかどうかを示します

Id


OracleDependencyインスタンスの一意の識別子を表します

IsEnabled


アプリケーションとデータベースの間で依存性が有効になっているかどうかを示します

QueryBasedNotification


変更通知登録がオブジェクト・ベースか問合せベースかを指定します

RegisteredQueryIDs


CHANGE_NOTIFICATION_QUERY_IDのリストを提供します

RegisteredResources


通知登録で登録されたデータベース・リソースを示します

UserName


OracleDependencyインスタンスに関連付けられているデータベース・ユーザー名を示します


DataSource

このプロパティでは、OracleDependencyインスタンスに関連付けられているデータ・ソースを示します。

宣言

// C#
public string DataSource{get;}

プロパティ値

OracleDependencyインスタンスに関連付けられているデータ・ソースを示す文字列。

備考

OracleDependencyに関連付けられているOracleCommandが実行され、通知が正常に登録されると、DataSourceプロパティはデータ・ソースを使用して移入されます。

HasChanges

このプロパティは、この依存性に関連付けられているデータベースに変更があるかどうかを示します。

宣言

// C#
public bool HasChanges{get;}

プロパティ値

この依存性に関連付けられている変更がデータベースで検出された場合はTrueを戻し、それ以外の場合はFalseを戻すbool値。

備考

OnChangeイベントを使用するかわりに、アプリケーションではHasChangesプロパティをチェックして、この依存性に関連付けられている変更がデータベースにあるかどうかを判断できます。

HasChangesプロパティにアクセスすると、その値がFalseにリセットされ、次の通知を認識できるようになります。

Id

このプロパティでは、OracleDependencyインスタンスの一意の識別子を表します。

宣言

// C#
public string Id{get;}

プロパティ値

OracleDependencyインスタンスの作成時にインスタンスに対して生成された一意識別子を表す文字列。

備考

このプロパティは、OracleDependencyインスタンスの作成時に設定されます。

IsEnabled

このプロパティは、アプリケーションとデータベースの間で依存性が有効になっているかどうかを示します。

宣言

// C#
public bool IsEnabled {get;}

プロパティ値

アプリケーションとデータベース間で依存性が有効になっているかどうかを指定するbool値。

備考

アプリケーションとデータベース間の依存性は、OracleDependencyインスタンスの作成時には確立されません。依存性に関連付けられたコマンドが実行されると、この依存性は確立されます。このとき、通知要求がデータベースに登録されます。通知登録がデータベースから削除されたとき、またはタイムアウトになったときに、依存性は消滅します。

QueryBasedNotification

このインスタンス・プロパティでは、変更通知登録がオブジェクト・ベースか問合せベースかを指定します。

宣言

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

プロパティ値

変更通知登録がオブジェクト・ベースかどうかを指定します。

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

備考

変更通知用のコマンドを登録するコマンドが実行された後に、このプロパティ値が設定された場合は、値が無視されます。

デフォルトでは、このプロパティはtrueになります。

Oracle Data Provider for .NETリリース11.1およびOracle Database 11gリリース1(11.1)以降では、単にオブジェクト・レベルではなく、行レベルの問合せをODP.NETの開発者が登録できます。 選択した行が変更されたときにのみ、アプリケーションは通知を受信します。 問合せベースの通知では、アプリケーションに通知が必要な変更をより明確に指定できるので、クライアント側のキャッシュ・データの使用を開発者がよりきめ細かく制御できます。

問合せベースの通知の場合は、OracleNotificationTypeの列挙値がQueryに設定されます。

RegisteredQueryIDs

このインスタンス・プロパティは、CHANGE_NOTIFICATION_QUERY_IDのリストを提供します。

宣言

// C#
public ArrayList RegisteredQueryIDs {get;}

プロパティ値

このプロパティは、CHANGE_NOTIFICATION_QUERY_IDArrayListです。

例外

ObjectDisposedException: オブジェクトはすでに処理されています。

備考

このプロパティは、変更通知用に登録された問合せを一意に識別するCHANGE_NOTIFICATION_QUERY_IDのリストを提供します。 データベースから戻される通知にもこれらのIDが含まれているので、どの問合せに対する通知かをアプリケーションで特定できます。

RegisteredQueryIDsの索引nQueryIdは、RegisteredResourcesの索引nの文を示しています。

RegisteredResources

このプロパティは、通知登録に登録されているデータベース・リソースを示します。

宣言

// C#
public ArrayList RegisteredResources{get;}

プロパティ値

通知登録に含まれる登録済リソース。

備考

ArrayListには、このOracleDependencyオブジェクトを介して通知用に登録されたすべてのコマンド文が含まれます。 これは、コマンド実行によりContinuous Query Notificationが登録されたときに、適宜更新されます。

UserName

このプロパティは、OracleDependencyインスタンスに関連付けられているデータベース・ユーザー名を示します。

宣言

// C#
public string UserName{get;}

プロパティ値

OracleDependencyインスタンスに関連付けられているデータベース・ユーザー名を示す文字列。 このデータベース・ユーザーは、Continuous Query Notification要求をデータベースに登録します。

備考

OracleDependencyに関連付けられているOracleCommandが実行され、通知が正常に登録されると、UserNameプロパティはユーザー名を使用して移入されます。通知登録を削除できるのは、登録を作成するユーザーまたはデータベース・システム管理者のみです。

このプロパティにより指定されたユーザーは、Continuous Query Notificationをデータベースに正常に登録するためのCHANGE NOTIFICATION権限を持っている必要があります。


OracleDependencyメソッド

OracleDependencyメソッドのリストを、表8-10に示します。

表8-10 OracleDependencyメソッド

メソッド 説明

AddCommandDependency


指定されたOracleCommandインスタンスにOracleDependencyインスタンスをバインドします

Equals

System.Objectからの継承

GetHashCode

System.Objectからの継承

GetType

System.Objectからの継承

RemoveRegistration


アプリケーションとデータベース間に指定されている依存性を削除します

ToString

System.Objectからの継承


AddCommandDependency

このインスタンス・メソッドでは、指定されたOracleCommandインスタンスにOracleDependencyインスタンスをバインドします。

宣言

// C#
Public void AddCommandDependency (OracleCommand cmd);

パラメータ

例外

ArgumentNullException: cmdパラメータがNULLです。

InvalidOperationException: 指定されたOracleCommandインスタンスには、すでに通知要求が含まれています。

備考

OracleDependencyインスタンスは、複数のOracleCommandインスタンスにバインドできます。

AddCommandDependencyメソッドは、既存のOracleDependencyインスタンスをOracleCommandインスタンスにバインドする際、OracleNotificationRequestインスタンスを作成し、指定されたOracleCommand.Notificationプロパティにこのインスタンスを設定します。

このメソッドによりOracleNotificationRequestインスタンスが作成される際、次のOracleNotificationRequestプロパティが設定されます。

このメソッドを使用すると、複数のコマンドを1つのContinuous Query Notification登録要求に関連付けることができます。さらに、OracleCommandOracleDependency間に関連が確立されると、OracleCommandに割り当てられているOracleNotificationRequest属性の値を変更できます。

ただし、複数のOracleCommandオブジェクトが1つのOracleDependencyオブジェクトに関連付けられている場合は、最初に実行されるOracleCommandオブジェクトのOracleNotificationRequest属性(TimeoutIsPersistentおよびIsNotifiedOnce)が登録に使用され、その後に実行されるOracleCommandに関連付けられている属性は無視されます。

さらに、OracleDependencyに関連付けられているコマンドが実行および登録されると、同じOracleDependencyに関連付けられている後続のすべてのコマンドの実行と登録では、同じ"User Id"および"Data Source"接続文字列属性を持つ接続を使用する必要があります。

それ以外の場合は、例外がスローされます。


参照:


RemoveRegistration

このインスタンスは、アプリケーションとデータベースの間に指定されている依存性を削除します。依存性の登録がデータベースから削除されると、OracleDependencyではデータベースで発生する変更を検出できなくなります。

宣言

// C#
public void RemoveRegistration(OracleConnection con)

パラメータ

例外

InvalidOperationException: 関連する接続がオープンされていません。

備考

現行のOracleDependencyインスタンスに関連付けられている通知登録が、データベースから削除されます。

OracleConnectionパラメータはオープンされている必要があります。このインスタンス・メソッドでは、接続をアプリケーションに対して暗黙的にオープンしません。

依存性が有効でない場合は、例外が表示されます。


OracleDependencyイベント

OracleDependencyイベントのリストを、表8-11に示します。

表8-11 OracleDependencyイベント

イベント 説明

OnChange


依存性に関連付けられているデータベース通知をデータベースから受信すると送信されるイベント


OnChange

OnChangeイベントは、依存性に関連付けられているデータベース通知をデータベースから受信すると送信されます。通知に関連する情報は、OracleChangeNotificationEventArgsクラスに格納されます。

宣言

// C#
public event OnChangeEventHandler OnChange;

備考

OnChangeイベントは、依存性に関連付けられている、任意の結果セットが変更されると発生します。トランザクションの一部であるオブジェクトの場合、通知は変更された各オブジェクトで受信されます。このイベントは、データベースまたは登録ステータスに関連する他のアクション(データベースの停止や起動または登録タイムアウトなど)に対しても発生します。