次の方法で共有


IObjectContext::D isableCommit メソッド (comsvcs.h)

オブジェクトのトランザクション更新が不整合な状態であり、現在の状態ではコミットできないことを宣言します。

構文

HRESULT DisableCommit();

戻り値

このメソッドは、次の値を返すことができます。

リターン コード 説明
S_OK
メソッドは正常に完了しました。 オブジェクトのトランザクション更新は、オブジェクトが EnableCommit または SetComplete を呼び出すまでコミットできません。
E_UNEXPECTED
予期しないエラーが発生しました。 これは、あるオブジェクトが IObjectContext ポインターを別のオブジェクトに渡し、もう一方のオブジェクトがこのポインターを使用して DisableCommit を 呼び出した場合に発生する可能性があります。 IObjectContext ポインターは、最初に取得したオブジェクトのコンテキスト外では無効です。
CONTEXT_E_NOCONTEXT
現在のオブジェクトには、関連付けられたコンテキストがありません。 これはおそらく、COM+ CreateInstance メソッドの 1 つで作成されていないためです。

注釈

DisableCommit メソッドを使用すると、ステートフル オブジェクト内のメソッド呼び出し間でトランザクションが途中でコミットされないようにすることができます。 オブジェクトが DisableCommit を呼び出すと、その作業に一貫性がなく、クライアントからさらにメソッド呼び出しを受け取るまで作業を完了できないことが示されます。 また、その作業を実行するには、その状態を維持する必要があることを示します。 これにより、COM+ がオブジェクトを非アクティブ化し、メソッド呼び出しからのリターン時にそのリソースを再利用できなくなります。 オブジェクトが DisableCommit を呼び出した場合、オブジェクトが EnableCommit または SetComplete を呼び出す前にクライアントがトランザクションをコミットしようとすると、トランザクションは中止されます。

たとえば、データベースを更新する GeneralLedger コンポーネントがあるとします。 クライアントは、GeneralLedger オブジェクトを複数呼び出して、さまざまなアカウントにエントリを投稿します。 最終的なメソッド呼び出しが返されたとき、またはトランザクションを中止する必要がある場合は、借方がクレジットと等しくなければならないという整合性制約があります。 GeneralLedger オブジェクトには初期化メソッドがあり、クライアントはクライアントが行う一連の呼び出しを通知し、GeneralLedger オブジェクトは DisableCommit を呼び出します。 オブジェクトは、呼び出し間の状態を維持するため、シーケンスの最後の呼び出しが行われた後、オブジェクトは、作業のコミットを許可する前に整合性制約が満たされていることを確認できます。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー comsvcs.h

こちらもご覧ください

IObjectContext