Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
En session avgränsar transaktionsomfattningen för en lokal transaktion med SQL Server Native Client OLE DB-leverantör. När SQL Server Native Client OLE DB-leverantören på uppdrag av en konsument skickar in en förfrågan till en ansluten instans av SQL Server, utgör förfrågan en arbetsenhet för SQL Server Native Client OLE DB-leverantören. Lokala transaktioner omsluter alltid en eller flera arbetsenheter på en enda SQL Server Native Client OLE DB-leverantörssession.
Med standardläget för autocommit i SQL Server Native Client OLE DB behandlar en enda arbetsenhet som omfattningen av en lokal transaktion. Endast en enhet deltar i den lokala transaktionen. När en session skapas påbörjar SQL Server Native Client OLE DB-leverantören en transaktion för sessionen. Efter att en arbetsenhet har slutförts framgångsrikt genomförs arbetet i arbetet. Vid misslyckande rullas allt påbörjat arbete tillbaka och felet rapporteras till konsumenten. I båda fallen startar SQL Server Native Client OLE DB-leverantören en ny lokal transaktion för sessionen så att allt arbete utförs inom en transaktion.
Konsumenten av SQL Server Native Client OLE DB-leverantör kan styra mer exakt kontroll över det lokala transaktionsområdet genom att använda ITransactionLocal-gränssnittet. När en konsumentsession initierar en transaktion behandlas alla sessionsarbetsenheter mellan transaktionens startpunkt och de slutliga Commit - eller Abort-metodanropen som en atomär enhet. SQL Server Native Client OLE DB-leverantören påbörjar implicit en transaktion när konsumenten ber om det. Om konsumenten inte begär retention återgår sessionen till föräldratransaktionsnivåbeteende, oftast autocommitt-läge.
SQL Server Native Client OLE DB-leverantören stöder ITransactionLocal::StartTransaction-parametrarna enligt följande.
| Parameter | Description |
|---|---|
| isoLevel[in] | Isoleringsnivån som ska användas vid denna transaktion. Vid lokala transaktioner stöder SQL Server Native Client OLE DB-leverantören följande: ISOLATIONLEVEL_UNSPECIFIED ISOLATIONLEVEL_CHAOS ISOLATIONLEVEL_READUNCOMMITTED ISOLATIONLEVEL_READCOMMITTED ISOLATIONLEVEL_REPEATABLEREAD ISOLATIONLEVEL_CURSORSTABILITY ISOLATIONLEVEL_REPEATABLEREAD ISOLATIONLEVEL_SERIALIZABLE ISOLATIONLEVEL_ISOLATED ISOLATIONLEVEL_SNAPSHOT Obs: Från och med SQL Server 2005 (9.x) gäller ISOLATIONLEVEL_SNAPSHOT för isoLevel-argumentet oavsett om versionshantering är aktiverad för databasen eller inte. Dock uppstår ett fel om användaren försöker köra en sats och versionshantering inte är aktiverad och/eller databasen inte är skrivskyddad. Dessutom uppstår felet XACT_E_ISOLATIONLEVEL om ISOLATIONLEVEL_SNAPSHOT anges som isoLevel när den är ansluten till en version av SQL Server tidigare än SQL Server 2005 (9.x). |
| isoFlags[in] | SQL Server Native Client OLE DB-leverantören ger ett fel för alla värden utom noll. |
| pOtherOptions[in] | Om det inte är NULL, begär SQL Server Native Client OLE DB-leverantören optionsobjektet från gränssnittet. Den SQL Server Native Client OLE DB-leverantören returnerar XACT_E_NOTIMEOUT om optionsobjektets ulTimeout-medlem inte är noll. SQL Server Native Client OLE DB-leverantören ignorerar värdet på medlemmen szDescription. |
| pulTransactionLevel[out] | Om det inte är NULL, returnerar SQL Server Native Client OLE DB-leverantören den nästlade nivån för transaktionen. |
För lokala transaktioner implementerar SQL Server Native Client OLE DB-leverantören ITransaction::Abort-parametrarna enligt följande.
| Parameter | Description |
|---|---|
| pboidReason[in] | Ignoreras om det är satt. Kan säkert vara NULL. |
| fBehåller[in] | När det gäller SANT påbörjas en ny transaktion implicit för sessionen. Transaktionen måste genomföras eller avslutas av konsumenten. När FELAKTIGT går SQL Server Native Client OLE DB-leverantören tillbaka till autocommit-läge för sessionen. |
| fAsync[in] | Asynkron avbrytning stöds inte av SQL Server Native Client OLE DB-leverantören. Den SQL Server Native Client OLE DB-leverantören returnerar XACT_E_NOTSUPPORTED om värdet inte är FALSKT. |
För lokala transaktioner implementerar SQL Server Native Client OLE DB-leverantören ITransaction::Commit-parametrar enligt följande.
| Parameter | Description |
|---|---|
| fBehåller[in] | När det gäller SANT påbörjas en ny transaktion implicit för sessionen. Transaktionen måste genomföras eller avslutas av konsumenten. När FELAKTIGT går SQL Server Native Client OLE DB-leverantören tillbaka till autocommit-läge för sessionen. |
| grfTC[in] | Asynkrona och fas ett-returer stöds inte av SQL Server Native Client OLE DB-leverantören. Den SQL Server Native Client OLE DB-leverantören returnerar XACT_E_NOTSUPPORTED för alla värden som inte XACTTC_SYNC. |
| grfRM[i] | Måste vara 0. |
De SQL Server Native Client OLE DB-leverantörens raduppsättningar på sessionen bevaras i en lokal commit- eller avbrytoperation baserat på värdena för raduppsättningens egenskaper DBPROP_ABORTPRESERVE och DBPROP_COMMITPRESERVE. Som standard är dessa egenskaper både VARIANT_FALSE och alla raduppsättningar SQL Server Native Client OLE DB-leverantören på sessionen förloras efter en avbryt- eller commit-operation.
SQL Server Native Client OLE DB-leverantören implementerar inte ITransactionObject-gränssnittet. Ett konsumentförsök att hämta en referens på gränssnittet ger E_NOINTERFACE.
Detta exempel använder ITransactionLocal.
// Interfaces used in the example.
IDBCreateSession* pIDBCreateSession = NULL;
ITransaction* pITransaction = NULL;
IDBCreateCommand* pIDBCreateCommand = NULL;
IRowset* pIRowset = NULL;
HRESULT hr;
// Get the command creation and local transaction interfaces for the
// session.
if (FAILED(hr = pIDBCreateSession->CreateSession(NULL,
IID_IDBCreateCommand, (IUnknown**) &pIDBCreateCommand)))
{
// Process error from session creation. Release any references and
// return.
}
if (FAILED(hr = pIDBCreateCommand->QueryInterface(IID_ITransactionLocal,
(void**) &pITransaction)))
{
// Process error. Release any references and return.
}
// Start the local transaction.
if (FAILED(hr = ((ITransactionLocal*) pITransaction)->StartTransaction(
ISOLATIONLEVEL_REPEATABLEREAD, 0, NULL, NULL)))
{
// Process error from StartTransaction. Release any references and
// return.
}
// Get data into a rowset, then update the data. Functions are not
// illustrated in this example.
if (FAILED(hr = ExecuteCommand(pIDBCreateCommand, &pIRowset)))
{
// Release any references and return.
}
// If rowset data update fails, then terminate the transaction, else
// commit. The example doesn't retain the rowset.
if (FAILED(hr = UpdateDataInRowset(pIRowset, bDelayedUpdate)))
{
// Get error from update, then terminate.
pITransaction->Abort(NULL, FALSE, FALSE);
}
else
{
if (FAILED(hr = pITransaction->Commit(FALSE, XACTTC_SYNC, 0)))
{
// Get error from failed commit.
}
}
if (FAILED(hr))
{
// Update of data or commit failed. Release any references and
// return.
}
// Release any references and continue.