Transakcja (ODBC)

Ten temat dotyczy klas MFC ODBC.

Transakcja jest sposobem grupowania lub wsadowego serii aktualizacji do źródła danych, dzięki czemu wszystkie są zatwierdzane jednocześnie lub żadne nie są zatwierdzane, jeśli wycofasz transakcję. Jeśli nie używasz transakcji, zmiany w źródle danych są zatwierdzane automatycznie, a nie zatwierdzane na żądanie.

Uwaga

Nie wszystkie sterowniki bazy danych ODBC obsługują transakcje. Wywołaj CanTransact funkcję składową obiektu CDatabase lub CRecordset , aby określić, czy sterownik obsługuje transakcje dla danej bazy danych. Należy pamiętać, że nie informuje o tym, CanTransact czy źródło danych zapewnia pełną obsługę transakcji. Należy również wywołać metodę CDatabase::GetCursorCommitBehavior i CDatabase::GetCursorRollbackBehavior po CommitTransRollback i, aby sprawdzić wpływ transakcji na otwarty CRecordset obiekt.

Wywołania funkcji CRecordset elementów członkowskich i Edit obiektu mają wpływ na źródło danych natychmiast po wywołaniu metody Update.AddNew Delete wywołania zaczęły obowiązywać natychmiast. Z kolei można użyć transakcji składającej się z wielu wywołań do AddNew, Edit, Updatei Delete, które są wykonywane, ale nie są zatwierdzane do momentu jawnego wywołania CommitTrans . Po ustanowieniu transakcji można wykonać serię takich wywołań, zachowując jednocześnie możliwość wycofania ich. Jeśli zasób krytyczny jest niedostępny lub jakiś inny warunek uniemożliwia ukończenie całej transakcji, możesz wycofać transakcję zamiast go zatwierdzać. W takim przypadku żadna ze zmian należących do transakcji nie ma wpływu na źródło danych.

Uwaga

Obecnie klasa CRecordset nie obsługuje aktualizacji źródła danych, jeśli zaimplementowano pobieranie wierszy zbiorczych. Oznacza to, że nie można wykonywać wywołań do AddNew, , EditDeletelub Update. Można jednak napisać własne funkcje, aby wykonywać aktualizacje, a następnie wywoływać te funkcje w ramach danej transakcji. Aby uzyskać więcej informacji na temat zbiorczego pobierania wierszy, zobacz Zestaw rekordów: pobieranie rekordów zbiorczo (ODBC).

Uwaga

Oprócz wpływu na zestaw rekordów transakcje wpływają na instrukcje SQL wykonywane bezpośrednio, o ile używasz odBC HDBC skojarzonego z obiektem CDatabase lub odBC HSTMT opartego na tym HDBC.

Transakcje są szczególnie przydatne, gdy masz wiele rekordów, które muszą być aktualizowane jednocześnie. W takim przypadku chcesz uniknąć półukończonej transakcji, na przykład może się zdarzyć, jeśli wyjątek został zgłoszony przed dokonaniem ostatniej aktualizacji. Grupowanie takich aktualizacji w transakcji umożliwia odzyskanie (wycofanie) ze zmian i zwrócenie rekordów do stanu przedtransakcji. Jeśli na przykład przelewa pieniądze z konta A na konto B, zarówno wypłata z A, jak i depozyt B musi zakończyć się powodzeniem w celu prawidłowego przetworzenia funduszy lub cała transakcja musi zakończyć się niepowodzeniem.

W klasach baz danych wykonujesz transakcje za pośrednictwem CDatabase obiektów. CDatabase Obiekt reprezentuje połączenie ze źródłem danych, a co najmniej jeden zestaw rekordów skojarzony z tym CDatabase obiektem działa na tabelach bazy danych za pośrednictwem funkcji składowych zestawu rekordów.

Uwaga

Obsługiwany jest tylko jeden poziom transakcji. Nie można zagnieżdżać transakcji ani transakcji obejmujących wiele obiektów bazy danych.

Poniższe tematy zawierają więcej informacji na temat sposobu wykonywania transakcji:

Zobacz też

Open Database Connectivity (ODBC)