OracleDependency
クラスは、アプリケーションとOracle Database間の依存性を表します。これを使用して、アプリケーションでは、関心のあるデータまたはOracle Databaseの状態が変更されたときはいつでも通知を取得できます。
クラスの継承
System.Object
Oracle.DataAccess.Client.OracleDependency
宣言
// C# public sealed class OracleDependency
要件
プロバイダ | 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 |
.NETストアド・プロシージャではサポートされません
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、メソッドではスレッド安全性は保証されません。
次の表に、OracleDependency
メンバーを示します。
OracleDependencyコンストラクタ
OracleDependency
コンストラクタを、表9-1にリストします。
OracleDependency静的フィールド
OracleDependency
静的フィールドを、表9-2にリストします。
OracleDependency静的メソッド
OracleDependency
静的メソッドを、表9-3にリストします。
表9-3 OracleDependency静的メソッド
静的メソッド | 説明 |
---|---|
|
|
|
指定された一意の識別子に基づいて |
OracleDependencyプロパティ
OracleDependency
プロパティを、表9-4にリストします。
表9-4 OracleDependencyプロパティ
プロパティ | 説明 |
---|---|
|
|
|
この依存性に関連付けられているデータベースに変更が加えられているかどうかを示します |
|
|
|
アプリケーションとデータベースの間で依存性が有効になっているかどうかを示します |
|
変更通知登録がオブジェクトベースか問合せベースかを指定します |
|
|
|
通知登録で登録されたデータベース・リソースを示します |
|
|
|
|
OracleDependencyメソッド
OracleDependency
メソッドを、表9-5にリストします。
表9-5 OracleDependencyメソッド
メソッド | 説明 |
---|---|
|
指定された |
|
|
|
|
|
|
|
アプリケーションとデータベース間に指定されている依存性を削除します |
|
|
OracleDependencyイベント
OracleDependency
イベントを、表9-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
インスタンスが設定されます。
連続問合せ通知は、コマンド実行時にデータベースに登録されます。コマンド実行メソッド(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
連続問合せ通知要求に関連付けられるコマンド。
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
インスタンスが設定されます。
連続問合せ通知は、コマンド実行時にデータベースに登録されます。コマンド実行メソッド(ExecuteNonQuery
やExecuteReader
など)により、通知要求が登録されます。OracleDependency
は、複数のOracleCommand
にバインドできます。これらのOracleCommand
オブジェクト文のいずれかが実行されると、関連付けられているOracleCommand
にその文が登録されます。個々のOracleCommand
の登録は個別に発生しますが、OracleDependency
が関連付けられているすべてのOracleCommand
オブジェクトに対して発生する、通知の検出および送信は1つのOracleDependency
で行うことができます。OnChange
イベントのアプリケーションに渡されるOnChangeEventArgs
では、データベース内での変更に関する情報を提供します。
このコンストラクタによって作成されるOracleNotificationRequest
インスタンスのプロパティのデフォルト値は、次のとおりです。
IsNotifiedOnce
は指定された値に設定されます。
Timeout
は指定された値に設定されます。
IsPersistent
は指定された値に設定されます。
OracleDependency
静的フィールドを、表9-7にリストします。
この静的フィールドは、通知リスナーがデータベース通知をリスニングするポート番号を示します。
宣言
// C# public static int Port{get; set}
プロパティ値
データベース通知をリスニングするポートの番号を表すint
値。ポート番号が-1
に設定されている場合、リスナーの開始時にランダムなポート番号が割り当てられます。それ以外の場合は、指定されたポート番号を使用してリスナーが開始されます。
例外
ArgumentOutOfRangeException
- ポート番号が負の値に設定されています。
InvalidOperationException
- リスナーが開始された後にポート番号が変更されようとしています。
備考
ODP.NETと同じアプリケーション・ドメイン内で実行される通知リスナーは、OracleDependency.Port
静的フィールドで指定するポート番号を使用します。このポート番号は、データベースから連続問合せ通知を受信します。ある通知リスナーは、すべての連続問合せ通知をリスニングできるため、各アプリケーション・ドメインに対して作成される通知リスナーは1つのみです。
OracleDependency
オブジェクトと関連付けられたコマンド通知リスナーが、アプリケーション・ドメイン存続中初めて実行されると、通知リスナーが作成されます。OracleDependency.Port
静的フィールドに指定されたポート番号は、その存続中、リスナーによって使用されます。OracleDependency.Port
静的フィールドは、通知リスナーの作成後に変更できますが、これを変更しても、通知リスナーがリスニング中の実際のポート番号には影響しません。
OracleDependency
静的メソッドを、表9-8にリストします。
表9-8 OracleDependency静的メソッド
静的メソッド | 説明 |
---|---|
|
|
|
指定された一意の識別子に基づいて |
この静的メソッドでは、指定された一意の識別子に基づいてOracleDependency
インスタンスを戻します。
宣言
// C#
public static OracleDependency GetOracleDependency(string guid)
パラメータ
guid
OracleDependency
インスタンスの一意の識別子を表す文字列。
例外
ArgumentException
- 指定された一意識別子は、OracleDependency
インスタンスを見つけられません。
戻り値
指定されたguid
パラメータを持つOracleDependency
インスタンス。
OracleDependency
プロパティを、表9-9にリストします。
表9-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
オブジェクトを介して通知用に登録されたすべてのコマンド文が含まれます。これは、コマンド実行により連続問合せ通知が登録されたときに、適宜更新されます。
このプロパティは、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
インスタンスに関連付けられているデータベース・ユーザー名を示す文字列。このデータベース・ユーザーは、連続問合せ通知をデータベースに登録します。
備考
OracleDependency
に関連付けられているOracleCommand
が実行され、通知が正常に登録されると、UserName
プロパティはユーザー名を使用して移入されます。通知登録を削除できるのは、登録を作成するユーザーまたはデータベース・システム管理者のみです。
このプロパティにより指定されたユーザーは、連続問合せ通知をデータベースに正常に登録するためのCHANGE
NOTIFICATION
権限を持っている必要があります。
OracleDependency
メソッドを、表9-10にリストします。
表9-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つの連続問合せ通知登録要求に関連付けることができます。さらに、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
イベントを、表9-11にリストします。
OnChange
イベントは、依存性に関連付けられているデータベース通知をデータベースから受信すると送信されます。通知に関連する情報は、OracleChangeNotificationEventArgs
クラスに格納されます。
宣言
// C# public event OnChangeEventHandler OnChange;
備考
OnChange
イベントは、依存性に関連付けられている、任意の結果セットが変更されると発生します。トランザクションの一部であるオブジェクトの場合、通知は変更された各オブジェクトで受信されます。このイベントは、データベースまたは登録ステータスに関連する他のアクション(データベースの停止や起動または登録タイムアウトなど)に対しても発生します。