Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
System Platform Analitycznych (PDW)
Baza danych SQL w Microsoft Fabric
Sesja ogranicza zakres transakcji dla lokalnej transakcji OLE DB Driver for SQL Server. Gdy na polecenie konsumenta sterownik OLE DB dla SQL Server wysyła żądanie do połączonej instancji SQL Server, żądanie to stanowi jednostkę pracy dla sterownika OLE DB dla SQL Servera. Lokalne transakcje zawsze obejmują jedną lub więcej jednostek pracy na jednej sesji sterownika OLE DB dla SQL Server.
Korzystając z domyślnego sterownika OLE DB dla trybu automatycznego zatwierdzania SQL Servera, pojedyncza jednostka pracy traktowana jest jako zakres lokalnej transakcji. W transakcji lokalnej uczestniczy tylko jedna jednostka. Po utworzeniu sesji sterownik OLE DB dla SQL Server rozpoczyna transakcję sesji. Po pomyślnym ukończeniu jednostki roboczej praca zostaje potwierdzona. W przypadku niepowodzenia każda rozpoczęta praca jest cofana i zgłaszana jest do konsumenta. W obu przypadkach sterownik OLE DB dla SQL Server rozpoczyna nową lokalną transakcję dla sesji, aby cała praca była wykonywana w ramach transakcji.
Sterownik OLE DB dla konsumenta SQL Server może precyzyjniej kontrolować lokalny zakres transakcji, korzystając z interfejsu ITransactionLocal . Gdy sesja konsumencka inicjuje transakcję, wszystkie jednostki pracy sesji między punktem startu transakcji a ostatecznymi wywołaniami metody Commit lub Abort są traktowane jako jednostka atomowa. Sterownik OLE DB dla SQL Server niejawnie rozpoczyna transakcję, gdy konsument mu to poleci. Jeśli konsument nie zażąda retencji, sesja wraca do zachowania na poziomie transakcji nadrodzica, najczęściej trybu automatycznego zatwierdzania.
Sterownik OLE DB dla SQL Server obsługuje parametry ITransactionLocal::StartTransaction w następujący sposób.
| Parameter | Description |
|---|---|
| isoLevel[in] | Poziom izolacji, który ma być użyty przy tej transakcji. W transakcjach lokalnych sterownik OLE DB dla SQL Server obsługuje następujące funkcje: ISOLATIONLEVEL_UNSPECIFIED ISOLATIONLEVEL_CHAOS ISOLATIONLEVEL_READUNCOMMITTED ISOLATIONLEVEL_READCOMMITTED ISOLATIONLEVEL_REPEATABLEREAD ISOLATIONLEVEL_CURSORSTABILITY ISOLATIONLEVEL_REPEATABLEREAD ISOLATIONLEVEL_SERIALIZABLE ISOLATIONLEVEL_ISOLATED ISOLATIONLEVEL_SNAPSHOT Uwaga: Począwszy od SQL Server 2005 (9.x), ISOLATIONLEVEL_SNAPSHOT jest prawidłowe dla argumentu poziomu isoLevel niezależnie od tego, czy wersjonowanie jest włączone dla bazy danych. Jednak błąd wystąpi, jeśli użytkownik spróbuje wykonać polecenie i wersjonowanie nie jest włączone i/lub baza danych nie jest dostępna tylko do odczytu. Dodatkowo, błąd XACT_E_ISOLATIONLEVEL wystąpi, jeśli ISOLATIONLEVEL_SNAPSHOT jest określony jako poziom isoLevel po połączeniu z wersją SQL Server starszą niż SQL Server 2005 (9.x). |
| isoFlags[in] | Sterownik OLE DB dla SQL Server zwraca błąd dla dowolnej wartości innej niż zero. |
| pOtherOptions[in] | Jeśli nie NULL, sterownik OLE DB dla SQL Server żąda obiektu opcji z interfejsu. Sterownik OLE DB dla SQL Server zwraca XACT_E_NOTIMEOUT, jeśli członek ulTimeout obiektu opcji nie jest zerowy. Sterownik OLE DB dla SQL Server ignoruje wartość członka szDescription . |
| pulTransactionLevel[out] | Jeśli nie jest NULL, sterownik OLE DB dla SQL Server zwraca zagnieżdżony poziom transakcji. |
Dla transakcji lokalnych sterownik OLE DB dla SQL Server implementuje parametry ITransaction::Abort w następujący sposób.
| Parameter | Description |
|---|---|
| pboidReason[in] | Ignorowane, jeśli jest ustawione. Można bezpiecznie mieć NULL. |
| fRetenting[in] | Gdy jest TRUE, nowa transakcja jest niejawnie rozpoczynana dla sesji. Transakcja musi zostać dokonana lub zakończona przez konsumenta. Gdy FALSE, sterownik OLE DB dla SQL Server wraca do trybu automatycznego zatwierdzania sesji. |
| fAsync[in] | Asynchroniczne przerwanie nie jest obsługiwane przez sterownik OLE DB dla SQL Server. Sterownik OLE DB dla SQL Server zwraca XACT_E_NOTSUPPORTED, jeśli wartość nie jest FALSE. |
Dla transakcji lokalnych sterownik OLE DB dla SQL Server implementuje parametry ITransaction::Commit w następujący sposób.
| Parameter | Description |
|---|---|
| fRetenting[in] | Gdy jest TRUE, nowa transakcja jest niejawnie rozpoczynana dla sesji. Transakcja musi zostać dokonana lub zakończona przez konsumenta. Gdy FALSE, sterownik OLE DB dla SQL Server wraca do trybu automatycznego zatwierdzania sesji. |
| grfTC[in] | Asynchroniczne i powroty fazy pierwszej nie są obsługiwane przez sterownik OLE DB dla SQL Server. Sterownik OLE DB dla SQL Server zwraca XACT_E_NOTSUPPORTED dla dowolnej wartości innej niż XACTTC_SYNC. |
| grfRM[in] | Musi mieć wartość 0. |
Sterownik OLE DB dla zestawów wierszy SQL Server na sesji jest zachowywany w lokalnej operacji commit lub abort na podstawie wartości właściwości zestawu wierszy DBPROP_ABORTPRESERVE i DBPROP_COMMITPRESERVE. Domyślnie te właściwości są VARIANT_FALSE i wszystkie sterowniki OLE DB dla zestawów wierszy SQL Server w sesji są tracone po operacji przerwania lub zatwierdzenia.
Sterownik OLE DB dla SQL Server nie implementuje interfejsu ITransactionObject . Próba pobrania referencji w interfejsie przez użytkownika zwraca E_NOINTERFACE.
Ten przykład wykorzystuje 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.