Udostępnij za pośrednictwem


Wspieranie transakcje lokalne

Sesja rozdziela zakres transakcji dla SQL Server Macierzysta klient OLE DB dostawca transakcji lokalnej. Kiedy w kierunku konsumenta, SQL Server Macierzystego dostawca klient OLE DB przesyła żądanie do wystąpienie połączonego SQL Server, żądanie stanowi jednostka pracy dla SQL Server Macierzystego dostawca klient OLE DB. Transakcje lokalne zawsze zawijanie jedną lub więcej jednostek pracy na jednym SQL Server Macierzysta klient OLE DB dostawca sesja.

Przy użyciu domyślnego SQL Server Klient OLE DB dostawca autocommit trybie macierzystym pojedynczą jednostkę pracy jest traktowana jako zakres transakcji lokalnej. Tylko jedna jednostka uczestniczy w transakcji lokalnej.Podczas tworzenia sesja SQL Server Macierzystego dostawca klient OLE DB rozpoczyna się od transakcji dla tej sesja. Po pomyślnym zakończeniu jednostka pracy jest zaangażowana w prace.W przypadku awarii żadnej pracy rozpoczęty zostanie przywrócona i zgłoszonym do konsumenta.W obu przypadkach SQL Server Macierzystego dostawca klient OLE DB rozpoczyna się od nowej transakcji lokalnych w sesja, aby wszystkie prace odbywa się w obrębie transakcji.

The SQL Server Native klient OLE DB dostawca consumer can direct more precise control over local transaction zakres by using the ITransactionLocal interfejs.Podczas sesja Konsument inicjuje transakcję, wszystkich sesja pracy jednostek między punkt początkowy transakcji i ewentualnego zatwierdzanie or Przerwanie wywołania metoda są traktowane jako niepodzielny jednostki organizacyjnej.The SQL Server Native klient OLE DB dostawca implicitly begins a transaction when directed to do so by the consumer. Jeżeli konsument nie wymaga przechowywania, sesja zostanie przywrócona nadrzędnego poziom transakcji zachowanie, najczęściej tryb automatycznego zatwierdzania.

The SQL Server Native klient OLE DB dostawca supports ITransactionLocal::StartTransaction parameters as follows.

Parameter

Description

isoLevel[w]

Poziom izolacji używanych w tej transakcji.W transakcji lokalnych SQL Server Macierzystego dostawca klient OLE DB obsługuje następujące czynności:

  • ISOLATIONLEVEL_UNSPECIFIED

  • ISOLATIONLEVEL_CHAOS

  • ISOLATIONLEVEL_READUNCOMMITTED

  • ISOLATIONLEVEL_READCOMMITTED

  • ISOLATIONLEVEL_REPEATABLEREAD

  • ISOLATIONLEVEL_CURSORSTABILITY

  • ISOLATIONLEVEL_REPEATABLEREAD

  • ISOLATIONLEVEL_SERIALIZABLE

  • ISOLATIONLEVEL_ISOLATED

  • ISOLATIONLEVEL_SNAPSHOT

NoteNote:
Zaczyna się od SQL Server 2005ISOLATIONLEVEL_SNAPSHOT obowiązuje w przypadku isoLevel argument niezależnie od tego, czy włączono przechowywanie wersji bazy danych.Jednak błąd wystąpi, jeśli użytkownik próbuje wykonać instrukcja i nie włączono przechowywanie wersji i/lub baza danych nie jest tylko do odczytu.Ponadto, jeśli ISOLATIONLEVEL_SNAPSHOT jest określony jako wystąpi błąd XACT_E_ISOLATIONLEVEL isoLevel po połączeniu z wersją SQL Server starsze niż SQL Server 2005.

isoFlags[w]

The SQL Server Native klient OLE DB dostawca returns an error for any value other than zero.

pOtherOptions[w]

Jeśli nie jest NULL, SQL Server Macierzystego dostawca klient OLE DB żąda obiektu opcji z interfejs. The SQL Server Native klient OLE DB dostawca returns XACT_E_NOTIMEOUT if the options object's ulTimeout element członkowski is not zero.The SQL Server Native klient OLE DB dostawca ignores the value of the szDescription element członkowski.

pulTransactionLevel[Brak]

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

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

Parameter

Description

pboidReason[w]

Ignorowane, jeśli jest ustawiona.Bezpieczne może mieć wartość NULL.

fRetaining[w]

Gdy wartość właściwości równa TRUE oznacza, sesja niejawnie rozpoczyna się nowa transakcja.Transakcji muszą być zatwierdzone lub przerwane przez odbiorcę.Gdy ma wartość FAŁSZ, SQL Server Macierzystego dostawca klient OLE DB powraca do tryb automatycznego zatwierdzania dla sesja.

fAsync[w]

Przerwanie asynchroniczne nie jest obsługiwany przez SQL Server Macierzystego dostawca klient OLE DB. The SQL Server Native klient OLE DB dostawca returns XACT_E_NOTSUPPORTED if the value is not FALSE.

Dla transakcji lokalnych SQL Server Implementuje macierzystego dostawca klient OLE DB Metody ITransaction::zatwierdzanie parametrów w następujący sposób.

Parameter

Description

fRetaining[w]

Gdy wartość właściwości równa TRUE oznacza, sesja niejawnie rozpoczyna się nowa transakcja.Transakcji muszą być zatwierdzone lub przerwane przez odbiorcę.Gdy ma wartość FAŁSZ, SQL Server Macierzystego dostawca klient OLE DB powraca do tryb automatycznego zatwierdzania dla sesja.

grfTC[w]

Asynchroniczne i faza jeden zwraca nie są obsługiwane przez SQL Server Macierzystego dostawca klient OLE DB. The SQL Server Native klient OLE DB dostawca returns XACT_E_NOTSUPPORTED for any value other than XACTTC_SYNC.

grfRM[w]

Musi mieć wartość 0.

The SQL Server Native klient OLE DB dostawca rowsets on the sesja are preserved on a local zatwierdzanie or abort operation based on the values of the zestaw wierszy properties DBPROP_ABORTPRESERVE and DBPROP_COMMITPRESERVE. Domyślnie właściwości te są zarówno VARIANT_FALSE i wszystkie SQL Server Macierzysta zestawów wierszy dostawca klient OLE DB w sesja zostaną utracone po operacji przerwania lub zatwierdzanie.

The SQL Server Native klient OLE DB dostawca does not implement the ITransactionObject interfejs.Próba konsumenta pobrania odwołanie w interfejs zwraca E_NOINTERFACE.

W tym przykładzie 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.