Udostępnij za pośrednictwem


Obsługa transakcji lokalnych

Zakres transakcji rozdziela sesja SQL Server macierzystego klienta OLE DB dostawca lokalnym transakcji.Kiedy w kierunku konsumenta, SQL Server macierzystego klienta dostawca OLE DB przesyła żądanie do połączonych wystąpienie z SQL Server, wniosek stanowi jednostkę pracy dla SQL Server macierzystego klienta OLE DB dostawca.Transakcje lokalne zawsze Zawijaj jedną lub więcej jednostek pracy na jednym SQL Server macierzystego klienta OLE DB dostawca sesja.

Przy użyciu domyślnego SQL Server macierzystego klienta dostawca OLE DB tryb autozatwierdzania, pojedynczą jednostkę pracy jest traktowana jako zakres transakcji lokalnej.Tylko jednej jednostki uczestniczy w transakcji lokalnej.Podczas tworzenia sesja SQL Server macierzystego klienta dostawca OLE DB rozpoczyna transakcję do sesja.Po pomyślnym zakończeniu jednostka pracy poświęca pracy.W przypadku awarii wycofać wszelkie prace rozpoczęte i zgłaszany jest błąd konsumenta.W każdym przypadek SQL Server macierzystego klienta dostawca OLE DB rozpoczyna nową transakcję lokalnych w sesja tak, aby wszystkie prace prowadzone jest w ramach transakcji.

SQL Server Macierzystym klienta OLE DB dostawca konsument może kierować dokładniej kontrolować zakres transakcji lokalnej za pomocą ITransactonLocal interfejs.Podczas sesja Konsument inicjuje transakcję, praca jednostki sesja między transakcji start wskaż i ewentualnego Commit lub przerwanie wywołania metoda są traktowane jako jednostka niepodzielny. SQL Server Macierzystego klienta dostawca OLE DB niejawnie rozpoczyna się transakcji, gdy skierowane w tym celu przez konsumenta.Jeśli konsument nie zażąda retencji, sesja powraca do nadrzędnego poziom transakcji zachowanie, najczęściej tryb autozatwierdzania.

SQL Server Macierzystego klienta dostawca OLE DB obsługuje ITransactionLocal::StartTransaction parametrów w następujący sposób.

Parametr

Opis

isoLevel[w]

Poziom izolacji z tej transakcji.W transakcji lokalnych SQL Server macierzystego klienta dostawca OLE DB obsługuje następujące:

  • ISOLATIONLEVEL_UNSPECIFIED

  • ISOLATIONLEVEL_CHAOS

  • ISOLATIONLEVEL_READUNCOMMITTED

  • ISOLATIONLEVEL_READCOMMITTED

  • ISOLATIONLEVEL_REPEATABLEREAD

  • ISOLATIONLEVEL_CURSORSTABILITY

  • ISOLATIONLEVEL_REPEATABLEREAD

  • ISOLATIONLEVEL_SERIALIZABLE

  • ISOLATIONLEVEL_ISOLATED

  • ISOLATIONLEVEL_SNAPSHOT

UwagaUwaga:
Począwszy od SQL Server 2005, ISOLATIONLEVEL_SNAPSHOT jest prawidłowa dla isoLevel argument, czy włączono przechowywanie wersji bazy danych.Jednakże, jeśli użytkownik próbuje wykonać wystąpi błąd instrukcja i nie jest włączone przechowywanie wersji lub bazy danych nie jest tylko do odczytu.Ponadto, jeśli ISOLATIONLEVEL_SNAPSHOT jest określony jako wystąpi błąd XACT_E_ISOLATIONLEVEL isoLevel po podłączeniu do wersja SQL Server starsze niż SQL Server 2005.

isoFlags[w]

SQL Server Macierzystego klienta dostawca OLE DB zwraca błąd wartość inną niż zero.

pOtherOptions[w]

Jeśli nie jest NULL, SQL Server macierzystego klienta dostawca OLE DB żąda obiektu opcje z interfejs. SQL Server XACT_E_NOTIMEOUT zwraca macierzystym klienta dostawca OLE DB, jeśli obiekt opcje ulTimeout element członkowski nie jest równa zero. SQL Server Macierzystego klienta dostawca OLE DB ignoruje wartość szDescription element członkowski.

pulTransactionLevel[out]

Jeśli nie jest NULL, SQL Server macierzystego klienta dostawca OLE DB zwraca poziom zagnieżdżonych transakcji.

Dla transakcji lokalnych SQL Server macierzystego klienta dostawca OLE DB implementuje ITransaction::Abort parametrów w następujący sposób.

Parametr

Opis

pboidReason[w]

Ignorowane, jeśli zestaw.Bezpiecznie może być NULL.

fRetaining[w]

Gdy ma wartość TRUE, nowa transakcja jest niejawnie rozpoczynany dla sesja.Transakcja musi zatwierdzeniu lub zakończone przez konsumenta.Gdy ma wartość FALSE, SQL Server macierzystego klienta dostawca OLE DB powraca do tryb autozatwierdzania dla sesja.

fAsync[w]

Przerywanie asynchroniczne nie jest obsługiwany przez SQL Server macierzystego klienta OLE DB dostawca. SQL Server Macierzystego klienta dostawca OLE DB zwraca XACT_E_NOTSUPPORTED, jeśli ma wartość FAŁSZ.

Dla transakcji lokalnych SQL Server macierzystego klienta dostawca OLE DB implementuje metody ITransaction::Commit parametrów w następujący sposób.

Parametr

Opis

fRetaining[w]

Gdy ma wartość TRUE, nowa transakcja jest niejawnie rozpoczynany dla sesja.Transakcja musi zatwierdzeniu lub zakończone przez konsumenta.Gdy ma wartość FALSE, SQL Server macierzystego klienta dostawca OLE DB powraca do tryb autozatwierdzania dla sesja.

grfTC[w]

Asynchroniczno i faza jeden zwraca nie są obsługiwane przez SQL Server macierzystego klienta OLE DB dostawca. SQL Server Macierzystego klienta dostawca OLE DB zwraca XACT_E_NOTSUPPORTED na wartość inną niż XACTTC_SYNC.

grfRM[w]

Musi być 0.

SQL Server Macierzystego klienta OLE DB dostawca zestaw wierszy w sesja są zachowywane na lokalnym zatwierdzanie lub przerwać operację, na podstawie wartości właściwości zestaw wierszy DBPROP_ABORTPRESERVE i DBPROP_COMMITPRESERVE.Domyślnie, właściwości te są zarówno VARIANT_FALSE jak i wszystkie SQL Server macierzystego klienta OLE DB dostawca wierszy w sesja zostaną utracone po przerwania lub zatwierdzanie operacji.

SQL Server Macierzystego klienta dostawca OLE DB nie implementuje ITransactionObject interfejs.Próba pobrania odniesienia na interfejs konsumenta zwraca E_NOINTERFACE.

W tym przykładzie użyto ITransactonLocal.

// 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.