Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform Systeem (PDW)
SQL-database in Microsoft Fabric
OLE DB-stuurprogramma downloaden
Een sessie begrenst de transactiescope voor een OLE DB-driver voor SQL Server-lokale transacties. Wanneer de OLE DB Driver voor SQL Server op aanwijzing van een consument een verzoek indient bij een verbonden instantie van SQL Server, vormt het verzoek een eenheid van werk voor de OLE DB Driver voor SQL Server. Lokale transacties omvatten altijd één of meer eenheden werk op één OLE DB-driver voor SQL Server-sessies.
Met behulp van de standaard OLE DB Driver voor SQL Server autocommit-modus wordt één eenheid werk behandeld als de scope van een lokale transactie. Slechts één eenheid neemt deel aan de lokale transactie. Wanneer een sessie wordt aangemaakt, start de OLE DB-driver voor SQL Server een transactie voor de sessie. Na succesvolle voltooiing van een werkunit wordt het werk uitgevoerd. Bij een storing wordt elk begonnen werk teruggedraaid en wordt de fout aan de consument gemeld. In beide gevallen start de OLE DB Driver voor SQL Server een nieuwe lokale transactie voor de sessie, zodat al het werk binnen een transactie wordt uitgevoerd.
De OLE DB-driver voor SQL Server-consument kan nauwkeuriger controle uitoefenen over de lokale transactiescope door gebruik te maken van de ITransactionLocal-interface . Wanneer een consumentensessie een transactie initieert, worden alle sessiewerkunits tussen het transactiestartpunt en de uiteindelijke commit- of abort-methodeaanroepen behandeld als een atomaire eenheid. De OLE DB Driver voor SQL Server start impliciet een transactie wanneer de consument daartoe wordt opgedragen. Als de consument geen retentie aanvraagt, keert de sessie terug naar ouderlijk transactieniveau, meestal autocommit-modus.
De OLE DB-driver voor SQL Server ondersteunt ITransactionLocal::StartTransaction-parameters als volgt.
| Kenmerk | Description |
|---|---|
| isoLevel[in] | Het isolatieniveau dat bij deze transactie wordt gebruikt. Bij lokale transacties ondersteunt de OLE DB Driver voor SQL Server het volgende: ISOLATIONLEVEL_UNSPECIFIED ISOLATIONLEVEL_CHAOS ISOLATIONLEVEL_READUNCOMMITTED ISOLATIONLEVEL_READCOMMITTED ISOLATIONLEVEL_REPEATABLEREAD ISOLATIONLEVEL_CURSORSTABILITY ISOLATIONLEVEL_REPEATABLEREAD ISOLATIONLEVEL_SERIALIZABLE ISOLATIONLEVEL_ISOLATED ISOLATIONLEVEL_SNAPSHOT Opmerking: Vanaf SQL Server 2005 (9.x) is ISOLATIONLEVEL_SNAPSHOT geldig voor het isoLevel-argument , ongeacht of versiebeheer voor de database is ingeschakeld of niet. Er zal echter een fout optreden als de gebruiker probeert een instructie uit te voeren en versiebeheer niet is ingeschakeld en/of de database niet alleen-lezen is. Daarnaast zal de fout XACT_E_ISOLATIONLEVEL optreden als ISOLATIONLEVEL_SNAPSHOT als isoLevel wordt gespecificeerd wanneer deze is verbonden met een versie van SQL Server vóór SQL Server 2005 (9.x). |
| isoFlags[in] | De OLE DB-driver voor SQL Server geeft een foutmelding voor elke andere waarde dan nul. |
| pOverOpties[in] | Als het niet NULL is, vraagt de OLE DB-driver voor SQL Server het options-object aan vanuit de interface. De OLE DB Driver voor SQL Server geeft XACT_E_NOTIMEOUT terug als het ulTimeout-lid van het options-object niet nul is. De OLE DB-driver voor SQL Server negeert de waarde van het szDescription-lid . |
| pulTransactionLevel[out] | Als het niet NULL is, geeft de OLE DB-driver voor SQL Server het geneste niveau van de transactie terug. |
Voor lokale transacties implementeert de OLE DB Driver voor SQL Server de parameters ITransaction::Abort als volgt.
| Kenmerk | Description |
|---|---|
| pboidReason[in] | Negeerd als het is ingesteld. Kan veilig NULL zijn. |
| fRetaining[in] | Wanneer WAAR, wordt er impliciet een nieuwe transactie gestart voor de sessie. De transactie moet door de consument worden uitgevoerd of beëindigd. Wanneer FOUT, schakelt de OLE DB-driver voor SQL Server terug naar autocommit-modus voor de sessie. |
| fAsync[in] | Asynchrone abort wordt niet ondersteund door de OLE DB-driver voor SQL Server. De OLE DB-driver voor SQL Server geeft XACT_E_NOTSUPPORTED terug als de waarde niet FOUT is. |
Voor lokale transacties implementeert de OLE DB Driver voor SQL Server de parameters ITransaction::Commit als volgt.
| Kenmerk | Description |
|---|---|
| fRetaining[in] | Wanneer WAAR, wordt er impliciet een nieuwe transactie gestart voor de sessie. De transactie moet door de consument worden uitgevoerd of beëindigd. Wanneer FOUT, schakelt de OLE DB-driver voor SQL Server terug naar autocommit-modus voor de sessie. |
| grfTC[in] | Asynchrone en fase één retouren worden niet ondersteund door de OLE DB Driver voor SQL Server. De OLE DB-driver voor SQL Server geeft XACT_E_NOTSUPPORTED terug voor elke waarde behalve XACTTC_SYNC. |
| grfRM[in] | Moet 0 zijn. |
De OLE DB-driver voor SQL Server-rijsets in de sessie worden bewaard bij een lokale commit- of abort-operatie op basis van de waarden van de rijseteigenschappen DBPROP_ABORTPRESERVE en DBPROP_COMMITPRESERVE. Standaard zijn deze eigenschappen zowel VARIANT_FALSE en alle OLE DB-driveren voor SQL Server-rijsets in de sessie gaan verloren na een abort- of commit-operatie.
De OLE DB-driver voor SQL Server implementeert de ITransactionObject-interface niet. Een poging van de consument om een referentie op de interface op te halen levert E_NOINTERFACE op.
Dit voorbeeld gebruikt 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.