Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Une session délimite l’étendue de transaction d’une transaction locale du fournisseur OLE DB SQL Server Native Client. Lorsque, dans la direction d’un consommateur, le fournisseur OLE DB SQL Server Native Client envoie une demande à une instance connectée de SQL Server, la demande constitue une unité de travail pour le fournisseur OLE DB SQL Server Native Client. Les transactions locales encapsulent toujours une ou plusieurs unités de travail sur une session de fournisseur OLE DB SQL Server Native Client unique.
À l’aide du mode de validation automatique du fournisseur OLE DB SQL Server Native Client par défaut, une seule unité de travail est traitée comme l’étendue d’une transaction locale. Une seule unité participe à la transaction locale. Lorsqu’une session est créée, le fournisseur OLE DB SQL Server Native Client commence une transaction pour la session. À la fin d’une unité de travail, le travail est validé. En cas d’échec, tout travail commencé est restauré et l’erreur est signalée au consommateur. Dans les deux cas, le fournisseur OLE DB SQL Server Native Client commence une nouvelle transaction locale pour la session afin que tout le travail soit effectué dans une transaction.
Le consommateur du fournisseur OLE DB SQL Server Native Client peut diriger un contrôle plus précis sur l’étendue de transaction locale à l’aide de l’interface ITransactionLocal . Lorsqu’une session consommateur lance une transaction, toutes les unités de travail de session entre le point de départ de la transaction et les appels de méthode Commit ou Abort éventuels sont traités comme une unité atomique. Le fournisseur OLE DB SQL Server Native Client commence implicitement une transaction lorsqu’il est dirigé vers le consommateur. Si le consommateur ne demande pas de rétention, la session revient au comportement de niveau transactionnel parent, le mode de validation automatique le plus souvent.
Le fournisseur OLE DB SQL Server Native Client prend en charge les paramètres ITransactionLocal ::StartTransaction comme suit.
| Paramètre | Descriptif |
|---|---|
| isoLevel[in] | Niveau d’isolation à utiliser avec cette transaction. Dans les transactions locales, le fournisseur OLE DB SQL Server Native Client prend en charge les éléments suivants : - ISOLATIONLEVEL_UNSPECIFIED - ISOLATIONLEVEL_CHAOS - ISOLATIONLEVEL_READUNCOMMITTED - ISOLATIONLEVEL_READCOMMITTED - ISOLATIONLEVEL_REPEATABLEREAD - ISOLATIONLEVEL_CURSORSTABILITY - ISOLATIONLEVEL_REPEATABLEREAD - ISOLATIONLEVEL_SERIALIZABLE - ISOLATIONLEVEL_ISOLATED - ISOLATIONLEVEL_SNAPSHOT Remarque : à partir de SQL Server 2005, ISOLATIONLEVEL_SNAPSHOT est valide pour l’argument isoLevel , que le contrôle de version soit activé ou non pour la base de données. Toutefois, une erreur se produit si l’utilisateur tente d’exécuter une instruction et que le contrôle de version n’est pas activé et/ou si la base de données n’est pas en lecture seule. En outre, l’erreur XACT_E_ISOLATIONLEVEL se produit si ISOLATIONLEVEL_SNAPSHOT est spécifié comme isoLevel lorsqu’il est connecté à une version de SQL Server antérieure à SQL Server 2005. |
| isoFlags[in] | Le fournisseur OLE DB SQL Server Native Client retourne une erreur pour une valeur autre que zéro. |
| pOtherOptions[in] | S’il n’est pas NULL, le fournisseur OLE DB SQL Server Native Client demande l’objet options à partir de l’interface. Le fournisseur OLE DB SQL Server Native Client retourne XACT_E_NOTIMEOUT si le membre ulTimeout de l’objet options n’est pas égal à zéro. Le fournisseur OLE DB SQL Server Native Client ignore la valeur du membre szDescription . |
| pulTransactionLevel[out] | S’il n’est pas NULL, le fournisseur OLE DB SQL Server Native Client retourne le niveau imbriqué de la transaction. |
Pour les transactions locales, le fournisseur OLE DB SQL Server Native Client implémente les paramètres ITransaction ::Abort comme suit.
| Paramètre | Descriptif |
|---|---|
| pboidReason[in] | Ignoré si défini. Peut être NULL en toute sécurité. |
| fRetaining[in] | Lorsque la valeur EST TRUE, une nouvelle transaction est implicitement commencée pour la session. La transaction doit être validée ou arrêtée par le consommateur. Lorsque la valeur est FALSE, le fournisseur OLE DB SQL Server Native Client revient au mode de validation automatique de la session. |
| fAsync[in] | L’abandon asynchrone n’est pas pris en charge par le fournisseur OLE DB SQL Server Native Client. Le fournisseur OLE DB SQL Server Native Client retourne XACT_E_NOTSUPPORTED si la valeur n’est pas FALSE. |
Pour les transactions locales, le fournisseur OLE DB SQL Server Native Client implémente les paramètres ITransaction ::Commit comme suit.
| Paramètre | Descriptif |
|---|---|
| fRetaining[in] | Lorsque la valeur EST TRUE, une nouvelle transaction est implicitement commencée pour la session. La transaction doit être validée ou arrêtée par le consommateur. Lorsque la valeur est FALSE, le fournisseur OLE DB SQL Server Native Client revient au mode de validation automatique de la session. |
| grfTC[in] | Les retours asynchrones et de phase 1 ne sont pas pris en charge par le fournisseur OLE DB SQL Server Native Client. Le fournisseur OLE DB SQL Server Native Client retourne XACT_E_NOTSUPPORTED pour toute valeur autre que XACTTC_SYNC. |
| grfRM[in] | Doit être égal à 0. |
Les ensembles de lignes du fournisseur OLE DB SQL Server Native Client sur la session sont conservés sur une opération de validation ou d’abandon locale en fonction des valeurs des propriétés de l’ensemble de lignes DBPROP_ABORTPRESERVE et DBPROP_COMMITPRESERVE. Par défaut, ces propriétés sont à la fois VARIANT_FALSE et tous les ensembles de lignes du fournisseur OLE DB SQL Server Native Client sur la session sont perdus après une opération d’abandon ou de validation.
Le fournisseur OLE DB SQL Server Native Client n’implémente pas l’interface ITransactionObject . Une tentative de récupération d’une référence sur l’interface retourne E_NOINTERFACE.
Cet exemple utilise 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.