OLE DB でのトランザクションのサポート
トランザクションとは、データ ソースに対する一連の更新をグループ化 (バッチ処理) する方法のことで、すべて成功して一度にコミットされるか、(いずれか 1 つが失敗して) まったくコミットされず、全トランザクションがロールバックされるかのいずれかになります。 このプロセスにより、データ ソースの結果の整合性が確保されます。
OLE DB では、次の 3 つの方法を使用したトランザクションに対応しています。
セッションとトランザクションの関係
1 つのデータ ソース オブジェクトで、1 つ以上のセッション オブジェクトを作成できます。各オブジェクトは、特定の時点でトランザクションのスコープ内またはスコープ外に作成できます。
セッションがトランザクションに入らない場合、データ ストア上のそのセッション内で行われたすべての作業は、各メソッド呼び出しで直ちにコミットされます。 (これは、自動コミット モードまたは暗黙モードと呼ばれることもあります。)
セッションがトランザクションに入る場合、データ ストア上のそのセッション内で行われるすべての作業はそのトランザクションの一部であり、1 つの単位としてコミットまたは中止されます。 (これは、手動コミット モードと呼ばれることもあります。)
トランザクションのサポートはプロバイダー固有です。 お使いのプロバイダーがトランザクションに対応している場合は、ITransaction
と ITransactionLocal
に対応するセッション オブジェクトが (入れ子にされていない) トランザクションに入ることができます。 OLE DB Templates クラス CSession はこれらのインターフェイスに対応し、Visual C++ にトランザクションのサポートを実装するための推奨される方法です。
トランザクションの開始と終了
コンシューマーの行セット オブジェクトで StartTransaction
、Commit
、Abort
の各メソッドを呼び出します。
ITransactionLocal::StartTransaction
を呼び出すと、新しいローカル トランザクションが開始されます。 トランザクションを開始すると、後の操作で必須とされた変更は、トランザクションをコミットするまでデータ ストアに適用されません。
ITransaction::Commit
または ITransaction::Abort
を呼び出すと、トランザクションが終了します。 Commit
を指定すると、トランザクションのスコープ内のすべての変更がデータ ストアに適用されます。 Abort
を指定すると、トランザクションのスコープ内のすべての変更が取り消され、データ ストアはトランザクションが開始される前の状態で残ります。
入れ子構造のトランザクション
入れ子構造のトランザクションは、アクティブなトランザクションがセッションに既に存在するときに、新しいローカル トランザクションを開始すると発生します。 新しいトランザクションは、現在のトランザクションの下の入れ子構造のトランザクションとして開始されます。 プロバイダーが入れ子構造のトランザクションに対応していない場合、セッションにアクティブなトランザクションが既に存在するときに StartTransaction
を呼び出すと、XACT_E_XTIONEXISTS が返されます。
分散トランザクション
分散トランザクションは、分散されたデータ (複数のネットワーク コンピューター システムにあるデータ) を更新するトランザクションです。 分散システムがトランザクションに対応している場合は、OLE DB トランザクション サポートではなく、.NET Framework を使用する必要があります。