ヘッダーをスキップ
Oracle® Data Provider for .NET開発者ガイド
12c リリース1(12.1)
B72971-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

OracleDependencyクラス

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コンストラクタ

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

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

コンストラクタ 説明

OracleDependencyコンストラクタ

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


OracleDependency静的フィールド

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

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

静的フィールド 説明

Port


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


OracleDependency静的メソッド

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

表9-3 OracleDependency静的メソッド

静的メソッド 説明

Equals

System.Objectからの継承

GetOracleDependency


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


OracleDependencyプロパティ

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

表9-4 OracleDependencyプロパティ

プロパティ 説明

DataSource


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

HasChanges


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

Id


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

IsEnabled


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

QueryBasedNotification


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

RegisteredQueryIDs


CHANGE_NOTIFICATION_QUERY_IDのリストを提供します

RegisteredResources


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

RowidInfo


ROWID情報が、データベース上でデータが変更されると発生する変更通知イベントの一部であるかどうかを示します

UserName


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


OracleDependencyメソッド

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

表9-5 OracleDependencyメソッド

メソッド 説明

AddCommandDependency


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

Equals

System.Objectからの継承

GetHashCode

System.Objectからの継承

GetType

System.Objectからの継承

RemoveRegistration


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

ToString

System.Objectからの継承


OracleDependencyイベント

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

表9-6 OracleDependencyイベント

イベント 説明

OnChange


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


OracleDependencyコンストラクタ

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

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

  • OracleDependency()

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

  • OracleDependency(OracleCommand)

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

  • OracleDependency(OracleCommand, bool, int, bool)

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

OracleDependency()

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

宣言

// C#
public OracleDependency ()

備考

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


注意:

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

OracleDependency(OracleCommand)

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

宣言

// C#
public OracleDependency (OracleCommand cmd)

パラメータ

  • cmd

    OracleDependecyオブジェクトがバインドされるコマンド。

例外

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

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

備考

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

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

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

  • IsNotifiedOnceTrueに設定されます。

  • Timeoutは50,000秒に設定されます。

  • IsPersistentFalseに設定されます。つまり、無効化メッセージに永続性はなく、配信前にインメモリー・キューに格納されます。

OracleDependency(OracleCommand, bool, int, bool)

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

宣言

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

パラメータ

  • cmd

    連続問合せ通知要求に関連付けられるコマンド。

  • isNotifiedOnce

    通知の発生後に、登録が自動的に削除されるかどうかを示すインジケータ。

  • timeout

    秒数で表した、登録が有効な時間。timeout0に設定されている場合、登録が期限切れになることはありません。timeoutの有効値は、0から4294967295です。

  • isPersistent

    配信前に、無効化メッセージがデータベース内で永続的にキューされるかどうかを示します。isPersistentパラメータがTrueに設定されている場合、メッセージはデータベース内で永続的にキューされ、データベースがクラッシュおよびシャットダウンした際にも失われることはありません。isPersistentプロパティがFalse に設定されている場合、メッセージは配信前にインメモリー・キューに格納されるため、失われる可能性があります。

    メッセージがデータベース・キューではなくインメモリー・キューに格納されることで、データベース・パフォーマンスは向上します。

例外

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

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

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

備考

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

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

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

  • IsNotifiedOnceは指定された値に設定されます。

  • Timeoutは指定された値に設定されます。

  • IsPersistentは指定された値に設定されます。

OracleDependency静的フィールド

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

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

静的フィールド 説明

Port


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


Port

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

宣言

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

プロパティ値

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

例外

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

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

備考

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

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

OracleDependency静的メソッド

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

表9-8 OracleDependency静的メソッド

静的メソッド 説明

Equals

System.Objectからの継承

GetOracleDependency


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


GetOracleDependency

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

宣言

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

パラメータ

  • guid

    OracleDependencyインスタンスの一意の識別子を表す文字列。

例外

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

戻り値

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

OracleDependencyプロパティ

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

表9-9 OracleDependencyプロパティ

プロパティ 説明

DataSource


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

HasChanges


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

Id


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

IsEnabled


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

QueryBasedNotification


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

RegisteredQueryIDs


CHANGE_NOTIFICATION_QUERY_IDのリストを提供します

RegisteredResources


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

RowidInfo


ROWID情報が、データベース上でデータが変更されると発生する変更通知イベントの一部であるかどうかを示します

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は、索引nRegisteredResourcesにおける索引nの文が対象です。

RegisteredResources

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

宣言

// C#
public ArrayList RegisteredResources{get;}

プロパティ値

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

備考

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

RowidInfo

このプロパティは、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情報が含まれます。

UserName

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

宣言

// C#
public string UserName{get;}

プロパティ値

OracleDependencyインスタンスに関連付けられているデータベース・ユーザー名を示す文字列。このデータベース・ユーザーは、連続問合せ通知をデータベースに登録します。

備考

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

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

OracleDependencyメソッド

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

表9-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);

パラメータ

  • cmd

    OracleDependencyオブジェクトにバインドされるコマンド。

例外

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

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

備考

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

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

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

  • IsNotifiedOnceTrueに設定されます。

  • Timeoutは50,000秒に設定されます。

  • IsPersistentFalseに設定され、配信前に無効化メッセージがインメモリー・キューに格納されます。

このメソッドを使用すると、複数のコマンドを1つの連続問合せ通知登録要求に関連付けることができます。さらに、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)

パラメータ

  • con

    現行のOracleDependencyインスタンスに関連付けられている接続。

例外

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

備考

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

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

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

OracleDependencyイベント

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

表9-11 OracleDependencyイベント

イベント 説明

OnChange


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


OnChange

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

宣言

// C#
public event OnChangeEventHandler OnChange;

備考

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