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