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コンストラクタのリストを、表8-1に示します。
OracleDependency静的フィールド
OracleDependency静的フィールドのリストを、表8-2に示します。
OracleDependency静的メソッド
OracleDependency静的メソッドのリストを、表8-3に示します。
表8-3 OracleDependency静的メソッド
| 静的メソッド | 説明 |
|---|---|
|
|
|
|
|
指定された一意の識別子に基づいて |
OracleDependencyプロパティ
OracleDependencyプロパティのリストを、表8-4に示します。
表8-4 OracleDependencyプロパティ
| プロパティ | 説明 |
|---|---|
|
|
|
|
|
この依存性に関連付けられているデータベースに変更が加えられているかどうかを示します |
|
|
|
|
|
アプリケーションとデータベースの間で依存性が有効になっているかどうかを示します |
|
|
変更通知登録がオブジェクト・ベースか問合せベースかを指定します |
|
|
|
|
|
通知登録で登録されたデータベース・リソースを示します |
|
|
|
OracleDependencyメソッド
OracleDependencyメソッドのリストを、表8-5に示します。
表8-5 OracleDependencyメソッド
| メソッド | 説明 |
|---|---|
|
|
指定された |
|
|
|
|
|
|
|
|
|
|
|
アプリケーションとデータベース間に指定されている依存性を削除します |
|
|
|
OracleDependencyイベント
OracleDependencyイベントのリストを、表8-6に示します。
OracleDependencyコンストラクタは、OracleDependencyクラスのインスタンスを作成します。
オーバーロード・リスト:
このコンストラクタは、OracleDependencyクラスのインスタンスを作成します。
OracleDependency(OracleCommand)
このコンストラクタでは、OracleDependencyクラスのインスタンスを作成し、指定されたOracleCommandインスタンスにバインドします。
OracleDependency(OracleCommand, bool, int, bool)
このコンストラクタでは、OracleDependencyクラスのインスタンスを作成し、指定されたOracleCommandインスタンスにバインドします。このとき、通知時にその通知が削除されるかどうか、通知登録のタイムアウト値、および通知の継続期間を指定します。
このコンストラクタは、OracleDependencyクラスのインスタンスを作成します。
宣言
// C# public OracleDependency ()
備考
このコンストラクタを使用すると、OracleCommandインスタンスは新たに作成されたOracleDependencyインスタンスにバインドされません。バインドするには、AddCommandDependencyメソッドを使用します。
|
注意: アプリケーションとデータベース間の依存性は、OracleDependencyインスタンスの作成時には確立されません。依存性は、関連付けられたコマンドの実行時に確立されます。 |
このコンストラクタは、OracleDependencyクラスのインスタンスを作成し、OracleCommandインスタンスにバインドします。
宣言
// C#
public OracleDependency (OracleCommand cmd)
パラメータ
cmd
OracleDependencyオブジェクトがバインドされるコマンド。
例外
ArgumentNullException: cmdパラメータがNULLです。
InvalidOperationException: 指定されたOracleCommandインスタンスには、すでに通知要求が含まれています。
備考
このOracleDependencyコンストラクタによりOracleCommandインスタンスがOracleDependencyインスタンスにバインドされると、OracleNotificationRequestインスタンスが作成され、OracleCommand.NotificationプロパティにそのOracleNotificationRequestインスタンスが設定されます。
Continuous Query Notificationは、コマンド実行時にデータベースに登録されます。任意のコマンド実行メソッド(ExecuteNonQueryやExecuteReaderなど)により、通知要求が登録されます。OracleDependencyは、複数のOracleCommandにバインドできます。これらのOracleCommandオブジェクト文のいずれかが実行されると、関連付けられているOracleCommandにその文が登録されます。個々のOracleCommandの登録は個別に発生しますが、OracleDependencyが関連付けられているすべてのOracleCommandオブジェクトに対して発生する、通知の検出および送信は1つのOracleDependencyで行うことができます。OnChangeイベントのアプリケーションに渡されるOnChangeEventArgsでは、データベース内での変更に関する情報を提供します。
このコンストラクタによって作成されるOracleNotificationRequestインスタンスのプロパティのデフォルト値は、次のとおりです。
IsNotifiedOnceはTrueに設定されます。
Timeoutは50,000秒に設定されます。
IsPersistentはFalseに設定されます。つまり、無効化メッセージに永続性はなく、配信前にメモリー内キューに格納されます。
このコンストラクタでは、OracleDependencyクラスのインスタンスを作成し、指定されたOracleCommandインスタンスにバインドします。このとき、通知時にその登録が削除されるかどうか、通知登録のタイムアウト値、および通知の継続期間を指定します。
宣言
// C# public OracleDependency (OracleCommand cmd, bool isNotifiedOnce, long timeout, bool isPersistent)
パラメータ
cmd
Continuous Query Notification要求に関連付けられるコマンド。
isNotifiedOnce
通知の発生後に、登録が自動的に削除されるかどうかを示すインジケータ。
timeout
秒数で表した、登録が有効な時間。timeoutが0に設定されている場合、登録が期限切れになることはありません。timeoutの有効値は、0〜4294967295です。
isPersistent
配信前に、無効化メッセージがデータベース内で永続的にキューされるかどうかを示します。isPersistentパラメータがTrueに設定されている場合、メッセージはデータベース内で永続的にキューされ、データベースがクラッシュおよびシャットダウンした際にも失われることはありません。isPersistentプロパティがFalseに設定されている場合、メッセージは配信前にメモリー内キューに格納されるため、失われる可能性があります。
メッセージがデータベース・キューではなくメモリー内キューに格納されることで、データベース・パフォーマンスは向上します。
例外
ArgumentNullException: cmdパラメータがNULLです。
ArgumentOutOfRangeException: 指定されたtimeoutが無効です。
InvalidOperationException: 指定されたOracleCommandインスタンスには、すでに通知要求が含まれています。
備考
このOracleDependencyコンストラクタによりOracleCommandインスタンスがOracleDependencyインスタンスにバインドされると、OracleNotificationRequestインスタンスが作成され、OracleCommand.NotificationプロパティにそのOracleNotificationRequestインスタンスが設定されます。
Continuous Query Notificationは、コマンド実行時にデータベースに登録されます。任意のコマンド実行メソッド(ExecuteNonQueryやExecuteReaderなど)により、通知要求が登録されます。OracleDependencyは、複数のOracleCommandにバインドできます。これらのOracleCommandオブジェクト文のいずれかが実行されると、関連付けられているOracleCommandにその文が登録されます。個々のOracleCommandの登録は個別に発生しますが、OracleDependencyが関連付けられているすべてのOracleCommandオブジェクトに対して発生する、通知の検出および送信は1つのOracleDependencyで行うことができます。OnChangeイベントのアプリケーションに渡されるOnChangeEventArgsでは、データベース内での変更に関する情報を提供します。
このコンストラクタによって作成されるOracleNotificationRequestインスタンスのプロパティのデフォルト値は、次のとおりです。
IsNotifiedOnceは指定された値に設定されます。
Timeoutは指定された値に設定されます。
IsPersistentは指定された値に設定されます。
OracleDependency静的フィールドのリストを、表8-7に示します。
この静的フィールドは、通知リスナーがデータベース通知をリスニングするポート番号を示します。
宣言
// 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静的メソッドのリストを、表8-8に示します。
表8-8 OracleDependency静的メソッド
| 静的メソッド | 説明 |
|---|---|
|
|
|
|
|
指定された一意の識別子に基づいて |
この静的メソッドでは、指定された一意の識別子に基づいてOracleDependencyインスタンスを戻します。
宣言
// C#
public static OracleDependency GetOracleDependency(string guid)
パラメータ
guid
OracleDependencyインスタンスの一意の識別子を表す文字列。
例外
ArgumentException: 指定された一意識別子は、OracleDependencyインスタンスを見つけられません。
戻り値
指定されたguidパラメータを持つOracleDependencyインスタンス。
OracleDependencyプロパティのリストを、表8-9に示します。
表8-9 OracleDependencyプロパティ
| プロパティ | 説明 |
|---|---|
|
|
|
|
|
この依存性に関連付けられているデータベースに変更が加えられているかどうかを示します |
|
|
|
|
|
アプリケーションとデータベースの間で依存性が有効になっているかどうかを示します |
|
|
変更通知登録がオブジェクト・ベースか問合せベースかを指定します |
|
|
|
|
|
通知登録で登録されたデータベース・リソースを示します |
|
|
|
このプロパティでは、OracleDependencyインスタンスに関連付けられているデータ・ソースを示します。
宣言
// C#
public string DataSource{get;}
プロパティ値
OracleDependencyインスタンスに関連付けられているデータ・ソースを示す文字列。
備考
OracleDependencyに関連付けられているOracleCommandが実行され、通知が正常に登録されると、DataSourceプロパティはデータ・ソースを使用して移入されます。
このプロパティは、この依存性に関連付けられているデータベースに変更があるかどうかを示します。
宣言
// C#
public bool HasChanges{get;}
プロパティ値
この依存性に関連付けられている変更がデータベースで検出された場合はTrueを戻し、それ以外の場合はFalseを戻すbool値。
備考
OnChangeイベントを使用するかわりに、アプリケーションではHasChangesプロパティをチェックして、この依存性に関連付けられている変更がデータベースにあるかどうかを判断できます。
HasChangesプロパティにアクセスすると、その値がFalseにリセットされ、次の通知を認識できるようになります。
このプロパティでは、OracleDependencyインスタンスの一意の識別子を表します。
宣言
// C#
public string Id{get;}
プロパティ値
OracleDependencyインスタンスの作成時にインスタンスに対して生成された一意識別子を表す文字列。
備考
このプロパティは、OracleDependencyインスタンスの作成時に設定されます。
このプロパティは、アプリケーションとデータベースの間で依存性が有効になっているかどうかを示します。
宣言
// C#
public bool IsEnabled {get;}
プロパティ値
アプリケーションとデータベース間で依存性が有効になっているかどうかを指定するbool値。
備考
アプリケーションとデータベース間の依存性は、OracleDependencyインスタンスの作成時には確立されません。依存性に関連付けられたコマンドが実行されると、この依存性は確立されます。このとき、通知要求がデータベースに登録されます。通知登録がデータベースから削除されたとき、またはタイムアウトになったときに、依存性は消滅します。
このインスタンス・プロパティでは、変更通知登録がオブジェクト・ベースか問合せベースかを指定します。
宣言
// 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に設定されます。
このインスタンス・プロパティは、CHANGE_NOTIFICATION_QUERY_IDのリストを提供します。
宣言
// C#
public ArrayList RegisteredQueryIDs {get;}
プロパティ値
このプロパティは、CHANGE_NOTIFICATION_QUERY_IDのArrayListです。
例外
ObjectDisposedException: オブジェクトはすでに処理されています。
備考
このプロパティは、変更通知用に登録された問合せを一意に識別するCHANGE_NOTIFICATION_QUERY_IDのリストを提供します。 データベースから戻される通知にもこれらのIDが含まれているので、どの問合せに対する通知かをアプリケーションで特定できます。
RegisteredQueryIDsの索引nのQueryIdは、RegisteredResourcesの索引nの文を示しています。
このプロパティは、通知登録に登録されているデータベース・リソースを示します。
宣言
// C#
public ArrayList RegisteredResources{get;}
プロパティ値
通知登録に含まれる登録済リソース。
備考
ArrayListには、このOracleDependencyオブジェクトを介して通知用に登録されたすべてのコマンド文が含まれます。 これは、コマンド実行によりContinuous Query Notificationが登録されたときに、適宜更新されます。
このプロパティは、OracleDependencyインスタンスに関連付けられているデータベース・ユーザー名を示します。
宣言
// C#
public string UserName{get;}
プロパティ値
OracleDependencyインスタンスに関連付けられているデータベース・ユーザー名を示す文字列。 このデータベース・ユーザーは、Continuous Query Notification要求をデータベースに登録します。
備考
OracleDependencyに関連付けられているOracleCommandが実行され、通知が正常に登録されると、UserNameプロパティはユーザー名を使用して移入されます。通知登録を削除できるのは、登録を作成するユーザーまたはデータベース・システム管理者のみです。
このプロパティにより指定されたユーザーは、Continuous Query Notificationをデータベースに正常に登録するためのCHANGE NOTIFICATION権限を持っている必要があります。
OracleDependencyメソッドのリストを、表8-10に示します。
表8-10 OracleDependencyメソッド
| メソッド | 説明 |
|---|---|
|
|
指定された |
|
|
|
|
|
|
|
|
|
|
|
アプリケーションとデータベース間に指定されている依存性を削除します |
|
|
|
このインスタンス・メソッドでは、指定されたOracleCommandインスタンスにOracleDependencyインスタンスをバインドします。
宣言
// C#
Public void AddCommandDependency (OracleCommand cmd);
パラメータ
cmd
OracleDependencyオブジェクトにバインドされるコマンド。
例外
ArgumentNullException: cmdパラメータがNULLです。
InvalidOperationException: 指定されたOracleCommandインスタンスには、すでに通知要求が含まれています。
備考
OracleDependencyインスタンスは、複数のOracleCommandインスタンスにバインドできます。
AddCommandDependencyメソッドは、既存のOracleDependencyインスタンスをOracleCommandインスタンスにバインドする際、OracleNotificationRequestインスタンスを作成し、指定されたOracleCommand.Notificationプロパティにこのインスタンスを設定します。
このメソッドによりOracleNotificationRequestインスタンスが作成される際、次のOracleNotificationRequestプロパティが設定されます。
IsNotifiedOnceはTrueに設定されます。
Timeoutは50,000秒に設定されます。
IsPersistentはFalseに設定され、配信前に無効化メッセージがメモリー内キューに格納されます。
このメソッドを使用すると、複数のコマンドを1つのContinuous Query Notification登録要求に関連付けることができます。さらに、OracleCommandとOracleDependency間に関連が確立されると、OracleCommandに割り当てられているOracleNotificationRequest属性の値を変更できます。
ただし、複数のOracleCommandオブジェクトが1つのOracleDependencyオブジェクトに関連付けられている場合は、最初に実行されるOracleCommandオブジェクトのOracleNotificationRequest属性(Timeout、IsPersistentおよびIsNotifiedOnce)が登録に使用され、その後に実行されるOracleCommandに関連付けられている属性は無視されます。
さらに、OracleDependencyに関連付けられているコマンドが実行および登録されると、同じOracleDependencyに関連付けられている後続のすべてのコマンドの実行と登録では、同じ"User Id"および"Data Source"接続文字列属性を持つ接続を使用する必要があります。
それ以外の場合は、例外がスローされます。
このインスタンスは、アプリケーションとデータベースの間に指定されている依存性を削除します。依存性の登録がデータベースから削除されると、OracleDependencyではデータベースで発生する変更を検出できなくなります。
宣言
// C#
public void RemoveRegistration(OracleConnection con)
パラメータ
con
現行のOracleDependencyインスタンスに関連付けられている接続。
例外
InvalidOperationException: 関連する接続がオープンされていません。
備考
現行のOracleDependencyインスタンスに関連付けられている通知登録が、データベースから削除されます。
OracleConnectionパラメータはオープンされている必要があります。このインスタンス・メソッドでは、接続をアプリケーションに対して暗黙的にオープンしません。
依存性が有効でない場合は、例外が表示されます。
OracleDependencyイベントのリストを、表8-11に示します。
OnChangeイベントは、依存性に関連付けられているデータベース通知をデータベースから受信すると送信されます。通知に関連する情報は、OracleChangeNotificationEventArgsクラスに格納されます。
宣言
// C# public event OnChangeEventHandler OnChange;
備考
OnChangeイベントは、依存性に関連付けられている、任意の結果セットが変更されると発生します。トランザクションの一部であるオブジェクトの場合、通知は変更された各オブジェクトで受信されます。このイベントは、データベースまたは登録ステータスに関連する他のアクション(データベースの停止や起動または登録タイムアウトなど)に対しても発生します。