Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Det här avsnittet gäller för MFC ODBC-klasserna.
En transaktion är ett sätt att gruppera, eller batcha, en serie uppdateringar till en datakälla så att alla checkas in samtidigt eller att ingen checkas in om du återställer transaktionen. Om du inte använder en transaktion tillämpas ändringar i datakällan automatiskt i stället för att tillämpas på begäran.
Anmärkning
Alla ODBC-databasdrivrutiner stöder inte transaktioner.
CanTransact Anropa medlemsfunktionen för ditt CDatabase- eller CRecordset-objekt för att avgöra om drivrutinen stöder transaktioner för en viss databas. Observera att CanTransact inte anger om datakällan ger fullständigt transaktionsstöd. Du måste också anropa CDatabase::GetCursorCommitBehavior och CDatabase::GetCursorRollbackBehavior efter CommitTrans och Rollback kontrollera effekten av transaktionen på det öppna CRecordset objektet.
Anrop till medlemsfunktionerna AddNew och Edit för ett objekt av typen CRecordset påverkar datakällan omedelbart när du anropar Update.
Delete anrop träder också i kraft omedelbart. Däremot kan du använda en transaktion som består av flera anrop till AddNew, Edit, Updateoch Delete, som utförs men inte checkas in förrän du anropar CommitTrans explicit. Genom att upprätta en transaktion kan du köra en serie sådana anrop samtidigt som du behåller möjligheten att återställa dem. Om en kritisk resurs inte är tillgänglig eller om något annat villkor förhindrar att hela transaktionen slutförs kan du återställa transaktionen i stället för att genomföra den. I så fall påverkar ingen av ändringarna som hör till transaktionen datakällan.
Anmärkning
För närvarande stöder klassen CRecordset inte uppdateringar av datakällan om du har implementerat massradhämtning. Det innebär att du inte kan göra anrop till AddNew, Edit, Deleteeller Update. Du kan dock skriva egna funktioner för att utföra uppdateringar och sedan anropa dessa funktioner inom en viss transaktion. Mer information om masshämtning av rader finns i Recordset: Fetching Records in Bulk (ODBC).
Anmärkning
Förutom att påverka din recordset påverkar transaktioner även SQL-instruktioner som du kör direkt, förutsatt att du använder den ODBC HDBC som är associerad med ditt CDatabase objekt eller en ODBC HSTMT baserad på den HDBC.
Transaktioner är särskilt användbara när du har flera poster som måste uppdateras samtidigt. I det här fallet vill du undvika en halv slutförd transaktion, till exempel om ett undantag utlöstes innan den senaste uppdateringen gjordes. Genom att gruppera sådana uppdateringar i en transaktion kan du återgå från ändringarna och återställa posterna till tillståndet före transaktionen. Om till exempel en bank överför pengar från konto A till konto B måste både uttag från A och insättningen till B lyckas bearbeta pengarna korrekt eller så måste hela transaktionen misslyckas.
I databasklasserna utför du transaktioner via CDatabase objekt. Ett CDatabase-objekt representerar en anslutning till en datakälla, och en eller flera postuppsättningar som är associerade med det CDatabase-objektet fungerar på tabeller i databasen via medlemsfunktioner för postuppsättningar.
Anmärkning
Endast en transaktionsnivå stöds. Du kan inte kapsla transaktioner och en transaktion kan inte sträcka sig över flera databasobjekt.
Följande avsnitt innehåller mer information om hur transaktioner utförs: