Yerel hareketleri destekleme

Oturum işlem kapsamı için sınırlandırır bir SQL Serveryerel istemci ole db sağlayıcısı yerel işlem. Ne zaman, bir tüketici, yönünü, SQL Serveryerel istemci ole db sağlayıcı bağlı bir örneği için bir istek gönderir SQL Server, istek için iş birimi teşkil SQL Serveryerel istemci ole db sağlayıcısı. Yerel hareketleri her zaman tek bir çalışmanın bir veya daha fazla birim şal SQL Serveryerel istemci ole db sağlayıcısı oturumu.

Varsayılan kullanarak SQL Serveryerel istemci ole db sağlayıcısı autocommit modu, tek bir birim çalışma tedavi yerel bir işlem kapsamı. Yalnızca bir birimi, yerel hareket katılır. Bir oturum oluşturulduğunda, SQL Serveryerel istemci ole db sağlayıcısı oturumu için bir hareket başlıyor. İş birimi başarıyla tamamlayan çalışmayı taahhüt eder. Başarısızlık durumunda, herhangi bir iş başladı geri alınır ve hata tüketiciye bildirilir. Her iki durumda da, SQL Serveryerel istemci ole db sağlayıcısı başlar oturum için yeni bir yerel hareket böylece tüm iş bir hareket içinde yürütülmektedir.

SQL ServerYerel istemci ole db sağlayıcısı tüketici doğrudan yerel işlem kapsamı üzerinde daha hassas denetim kullanarak ITransactionLocal arabirimi. Tüketici oturumu bir işlem başlattığında, tüm oturum iş birimleri arasında hareket başlangıç noktası ve nihai taahhüt veya İptal yöntem çağrıları atomik bir birim olarak kabul edilir. SQL ServerYerel istemci ole db sağlayıcısı örtülü olarak ne zaman bunun için tüketici tarafından yönetilen bir hareket başlıyor. Tüketici koruma istemez, oturumun ana işlem düzeyinde davranış, genellikle autocommit modu geri döner.

SQL ServerYerel istemci ole db sağlayıcısı destekler ITransactionLocal::StartTransaction parametreleri aşağıdaki gibi.

Parametre

Açıklama

isoLevel[In]

Bu hareket ile kullanılacak yalıtım düzeyi. Yerel hareketleri, SQL Serveryerel istemci ole db sağlayıcısı destekler şu:

  • ISOLATIONLEVEL_UNSPECIFIED

  • ISOLATIONLEVEL_CHAOS

  • ISOLATIONLEVEL_READUNCOMMITTED

  • ISOLATIONLEVEL_READCOMMITTED

  • ISOLATIONLEVEL_REPEATABLEREAD

  • ISOLATIONLEVEL_CURSORSTABILITY

  • ISOLATIONLEVEL_REPEATABLEREAD

  • ISOLATIONLEVEL_SERIALIZABLE

  • ISOLATIONLEVEL_ISOLATED

  • ISOLATIONLEVEL_SNAPSHOT

NotNot
İle başlayan SQL Server 2005, ISOLATIONLEVEL_SNAPSHOT için geçerli isoLevel bağımsız sürüm oluşturma için veritabanı etkin olup olmadığı.Ancak, kullanıcı bir deyimini yürütmek çalışır ve sürüm oluşturma etkin değildir veya veritabanının salt okunur olmadığından bir hata oluşacaktır.Ayrıca, hata XACT_E_ISOLATIONLEVEL ortaya çıkar, ISOLATIONLEVEL_SNAPSHOT olarak belirtilirse, isoLevel bir sürüme bağlandığında SQL Serverdaha önce SQL Server 2005.

isoFlags[In]

SQL ServerYerel istemci ole db sağlayıcısı hata sıfırdan farklı herhangi bir değer verir.

pOtherOptions[In]

BOŞ değil ise, SQL Serveryerel istemci ole db sağlayıcısı isteği seçenekleri nesnesini arabirimden. SQL ServerYerel istemci ole db sağlayıcısı döndürür XACT_E_NOTIMEOUT Eğer seçenekler nesnenin ulTimeout üye sıfır değil. SQL ServerYerel istemci ole db sağlayıcısı değerini yok sayar szDescription üye.

pulTransactionLevel[out]

BOŞ değil ise, SQL Serveryerel istemci ole db sağlayıcısı döndürür iç içe geçmiş hareket düzeyini.

Yerel işlemler için SQL Serveryerel istemci ole db sağlayıcısı uygular ITransaction::Abort parametreleri aşağıdaki gibi.

Parametre

Açıklama

pboidReason[In]

Yoksayılan Eğer ayarlayın. Güvenle boş olabilir.

fRetaining[In]

Yeni bir hareket ne zaman bu true, oturum için örtülü olarak başlamış. Hareket kaydedilmiş veya tüketici tarafından sona gerekir. false olduğunda, SQL Serveryerel istemci ole db sağlayıcısı, oturumun özdevinimli döner.

fAsync[In]

Zaman uyumsuz iptal tarafından desteklenen SQL Serveryerel istemci ole db sağlayıcısını. SQL ServerYerel istemci ole db sağlayıcısı döndürür xact_e_notsupported değeri yanlış ise.

Yerel işlemler için SQL Serveryerel istemci ole db sağlayıcısı uygular ITransaction::Commit parametreleri aşağıdaki gibi.

Parametre

Açıklama

fRetaining[In]

Yeni bir hareket ne zaman bu true, oturum için örtülü olarak başlamış. Hareket kaydedilmiş veya tüketici tarafından sona gerekir. false olduğunda, SQL Serveryerel istemci ole db sağlayıcısı, oturumun özdevinimli döner.

grfTC[In]

Zaman uyumsuz ve faz döndürür are değil taraftar tarafından SQL Serveryerel istemci ole db sağlayıcısını. SQL ServerYerel istemci ole db sağlayıcısı xact_e_notsupported xacttc_sync dışındaki herhangi bir değer verir.

grfRM[In]

0 Olmalıdır.

SQL ServerOturum yerel istemci ole db sağlayıcısı satır kümeleri üzerinde yerel bir tamamlama korunur veya satır kümesi özelliklerini dbprop_abortpreserve ve DBPROP_COMMITPRESERVE değerleri temel işlemi iptal. Varsayılan olarak, hem VARIANT_FALSE ve tüm bu özellikleri olan SQL Serveryerel istemci ole db sağlayıcısı satır kümeleri oturum iptal ya da kaydetme işleminden sonra kayıp.

SQL ServerYerel istemci ole db sağlayıcısı uygulamaz ITransactionObject arabirimi. Arabirim üzerinde bir başvuru almak için tüketici girişimi E_NOINTERFACE döndürür.

Bu örnek 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.

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

Ayrıca bkz.

Kavramlar

İşlemler

Snapshot yalıtım ile çalışma

Diğer Kaynaklar

Understanding Row Versioning

Isolation Levels in the Database Engine

Locking in the Database Engine