OracleDependencyクラスは、アプリケーションとOracleデータベース間の依存性を表します。これを使用して、アプリケーションでは、関心のあるデータまたはOracleデータベースの状態が変更されたときはいつでも通知を取得できます。
クラスの継承
System.Object
Oracle.DataAccess.Client.OracleDependency
宣言
// C# public sealed class OracleDependency
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、メソッドではスレッド安全性は保証されません。
要件
ネームスペース: Oracle.DataAccess.Client
アセンブリ: Oracle.DataAccess.dll
Microsoft .NET Frameworkバージョン1.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
OracleDependecyオブジェクトがバインドされるコマンド。
例外
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: リスナーが開始された後にポート番号が変更されようとしています。
備考
ODP.NETと同じアプリケーション・ドメイン内で実行される通知リスナーは、OracleDependency.Port静的フィールドで指定するポート番号を使用します。このポート番号は、データベースからContinuous Query Notificationを受信します。ある通知リスナーは、すべての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は、索引nのRegisteredResourcesにおける索引nの文が対象です。
このプロパティは、通知登録に登録されているデータベース・リソースを示します。
宣言
// C#
public ArrayList RegisteredResources{get;}
プロパティ値
通知登録に含まれる登録済リソース。
備考
ArrayListには、このOracleDependencyオブジェクトを介して通知用に登録されたすべてのコマンド文が含まれます。これは、コマンド実行によりContinuous Query Notificationが登録されたときに、適宜更新されます。
このプロパティは、ROWID情報が、データベース上でデータが変更されると発生する変更通知イベントの一部であるかどうかを示します。
宣言
// C#
public OracleRowidInfo RowidInfo {get; set;};
プロパティ値
変更通知イベントにROWIDを含めるかどうかを判別するOracleRowidInfoの列挙型。
備考
このプロパティに有効な次の3つのOracleRowidInfoの列挙型があります。
Defaultには、OracleCommand.AddRowidプロパティがtrueに設定されているか、ROWIDが変更通知に対して登録されている問合せの選択リスト内にある場合のみ、変更通知イベント内のROWID情報が含まれます。
Includeには、ROWIDが問合せに対する選択リスト内にあるかどうかにかかわらずROWID情報が含まれます。
Excludeには、ROWIDが選択リスト内にあるかどうかにかかわらずROWID情報は含まれません。
ストアド・プロシージャを含む変更通知登録の場合、RowidInfoプロパティがOracleRowidInfo.Includeに設定されている場合のみ、変更通知イベントREF CURSORに関連する変更通知イベントに、ROWID情報が含まれます。
このプロパティは、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イベントは、依存性に関連付けられている、任意の結果セットが変更されると発生します。トランザクションの一部であるオブジェクトの場合、通知は変更された各オブジェクトで受信されます。このイベントは、データベースまたは登録ステータスに関連する他のアクション(データベースの停止や起動または登録タイムアウトなど)に対しても発生します。