Obsługa transakcji w OLE DB
Transakcja jest sposobem grupowania lub wsadowego serii aktualizacji źródła danych, tak aby wszystkie wszystkie zakończyły się powodzeniem i zostały zatwierdzone jednocześnie lub (jeśli którykolwiek z nich zakończy się niepowodzeniem) żadna z nich nie zostanie zatwierdzona, a cała transakcja zostanie wycofana. Ten proces zapewnia integralność wyniku źródła danych.
Ole DB obsługuje transakcje z następującymi trzema metodami:
Relacja sesji i transakcji
Pojedynczy obiekt źródła danych może utworzyć co najmniej jeden obiekt sesji, z których każdy może znajdować się wewnątrz lub poza zakresem transakcji w danym momencie.
Gdy sesja nie wprowadza transakcji, wszystkie prace wykonywane w ramach tej sesji w magazynie danych są natychmiast zatwierdzane w każdym wywołaniu metody. (Czasami jest to określane jako tryb autopotwierdzeń lub tryb niejawny).
Gdy sesja wchodzi w transakcję, wszystkie prace wykonywane w ramach tej sesji w magazynie danych są częścią tej transakcji i są zatwierdzane lub przerywane jako pojedyncza jednostka. (Czasami jest to nazywane trybem zatwierdzania ręcznego).
Obsługa transakcji jest specyficzna dla dostawcy. Jeśli używany dostawca obsługuje transakcje, obiekt sesji, który obsługuje ITransaction
i ITransactionLocal
może wprowadzić transakcję (bez zagnieżdżenia). Klasa CSession szablonów OLE DB obsługuje te interfejsy i jest zalecanym sposobem implementacji obsługi transakcji w języku Visual C++.
Uruchamianie i kończenie transakcji
Metody , Commit
i Abort
są wywoływane StartTransaction
w obiekcie zestawu wierszy w odbiorcy.
Wywołanie ITransactionLocal::StartTransaction
powoduje uruchomienie nowej transakcji lokalnej. Po rozpoczęciu transakcji wszelkie zmiany wymagane przez późniejsze operacje nie są stosowane do magazynu danych do momentu zatwierdzenia transakcji.
Wywołanie ITransaction::Commit
lub ITransaction::Abort
zakończenie transakcji. Commit
powoduje, że wszystkie zmiany w zakresie transakcji mają być stosowane do magazynu danych. Abort
powoduje, że wszystkie zmiany w zakresie transakcji zostaną anulowane, a magazyn danych pozostanie w stanie, który miał przed rozpoczęciem transakcji.
Transakcje zagnieżdżone
Transakcja zagnieżdżona występuje po rozpoczęciu nowej transakcji lokalnej, gdy aktywna transakcja już istnieje w sesji. Nowa transakcja jest uruchamiana jako zagnieżdżona transakcja poniżej bieżącej transakcji. Jeśli dostawca nie obsługuje zagnieżdżonych transakcji, wywołanie wywołania StartTransaction
, gdy w sesji jest już aktywna transakcja, zwraca XACT_E_XTIONEXISTS.
Transakcje rozproszone
Transakcja rozproszona to transakcja, która aktualizuje rozproszone dane; oznacza to, że dane dotyczące więcej niż jednego sieciowego systemu komputerowego. Jeśli chcesz obsługiwać transakcje w systemie rozproszonym, należy użyć programu .NET Framework, a nie obsługi transakcji OLE DB.