Prise en charge des transactions dans OLE DB
Une transaction est une façon de regrouper, ou de mettre en lot, une série d'opérations de mise à jour d'une source de données de manière à ce qu'elles réussissent toutes et soient toutes validées en même temps ou (si l'une d'elles échoue) qu'aucune d'elles ne soit validée et que la transaction entière soit restaurée. Ce processus assure l'intégrité du résultat sur la source de données.
OLE DB prend en charge les transactions à l'aide des trois méthodes suivantes :
Relations des sessions et des transactions
Un objet source de données unique peut créer un ou plusieurs objets session, dont chacun peut se situer à l'intérieur ou à l'extérieur de la portée d'une transaction à un moment donné.
Quand une session n'entre pas une transaction, tout le travail effectué au cours de cette session sur le magasin de données est immédiatement validé à chaque appel de méthode. (C'est ce qu'on appelle parfois le mode de validation automatique ou mode implicite.)
Quand une session entre une transaction, tout le travail effectué au cours de la session sur le magasin de données fait partie de cette transaction et est validé ou abandonné selon le concept du tout ou rien. (C'est ce qu'on appelle parfois le mode de validation manuelle.)
La prise en charge des transactions est propre au fournisseur. Si le fournisseur que vous utilisez prend en charge les transactions, un objet session qui prend en charge ITransaction et ITransactionLocal peut entrer une transaction simple (c'est-à-dire, non imbriquée). La classe des modèles OLE DB CSession prend en charge ces interfaces et représente le mode recommandé pour implémenter la prise en charge des transactions dans Visual C++.
Démarrage et arrêt de la transaction
Vous appelez les méthodes StartTransaction, Commit et Abort au sein de l'objet jeu de lignes dans le consommateur.
L'appel de ITransactionLocal::StartTransaction démarre une nouvelle transaction locale. Lorsque vous démarrez la transaction, les modifications éventuellement mandatées par les opérations suivantes ne sont pas appliquées en fait tant que vous n'aurez pas validé la transaction.
L'appel de ITransaction::Commit ou de ITransaction::Abort met fin à la transaction. Commit déclenche l'application de toutes les modifications relevant de la portée de la transaction dans le magasin de données. Abort entraîne l'annulation de toutes les modifications situées dans la portée de la transaction, et le magasin de données est laissé dans l'état où il se trouvait avant le début de la transaction.
Transactions imbriquées
Une transaction imbriquée se produit lorsque vous commencez une nouvelle transaction locale alors qu'une transaction active existe déjà dans la session. La nouvelle transaction démarre en tant que transaction imbriquée sous la transaction en cours. Si le fournisseur ne prend pas en charge les transactions imbriquées, l'appel de StartTransaction quand une transaction est déjà active dans la session retourne XACT_E_XTIONEXISTS.
Transactions distribuées
Une transaction distribuée est une transaction qui met à jour les données distribuées, c'est-à-dire les données contenues sur plusieurs systèmes informatiques mis en réseau. Si vous souhaitez prendre en charge les transactions sur un système distribué, vous devez utiliser le .NET Framework au lieu de prendre en charge des transactions OLE DB.