MDAC 2.5 SDK - OLE DB Programmer's Reference
OLE DB Interfaces


 

ITransactionLocal::StartTransaction

Begins a new transaction.

HRESULT StartTransaction (
   ISOLEVEL                isoLevel,
   ULONG                   isoFlags,
   ITransactionOptions *   pOtherOptions,
   ULONG *                 pulTransactionLevel);

Parameters

isoLevel

[in]
The isolation level to be used with this transaction. For more information, see "Isolation Levels" in Chapter 15, "Transactions."

Value Description
ISOLATIONLEVEL_UNSPECIFIED Applicable only to ITransactionJoin::JoinTransaction. Invalid for ITransactionLocal or for setting isolation level while in auto-commit mode.
ISOLATIONLEVEL_CHAOS Cannot overwrite the dirty data of other transactions at higher isolation levels.
ISOLATIONLEVEL_READUNCOMMITTED Read Uncommitted.
ISOLATIONLEVEL_BROWSE Synonym for ISOLATIONLEVEL_READUNCOMMITTED.
ISOLATIONLEVEL_READCOMMITTED Read Committed.
ISOLATIONLEVEL_CURSORSTABILITY Synonym for ISOLATIONLEVEL_READCOMMITTED.
ISOLATIONLEVEL_REPEATABLEREAD Repeatable Read.
ISOLATIONLEVEL_SERIALIZABLE Serializable.
ISOLATIONLEVEL_ISOLATED Synonym for ISOLATIONLEVEL_SERIALIZABLE.

isoFlags

[in]
Must be zero.

pOtherOptions

[in]
Optionally a null pointer. If this is not a null pointer, it is a pointer to an object previously returned from ITransactionLocal::GetOptionsObject called on this session instance.

pulTransactionLevel

[out]
A pointer to memory in which to return the level of the new transaction. The value of the top-level transaction is 1. If pulTransactionLevel is a null pointer, the level is not returned.

Return Code

S_OK

The method succeeded.

DB_E_OBJECTOPEN

A rowset object was open, and the provider does not support starting a new transaction with existing open rowset objects.

E_FAIL

A provider-specific error occurred.

E_UNEXPECTED

An unknown error occurred, and the method failed.

XACT_E_CONNECTION_DENIED

This session could not create a new transaction at the present time due to unspecified capacity issues.

XACT_E_CONNECTION_DOWN

This session is having communication difficulties with its internal implementation.

XACT_E_ISOLATIONLEVEL

Neither the requested isolation level nor a strengthening of it can be supported by this transaction implementation, or isoLevel was not valid.

XACT_E_LOGFULL

A transaction could not be created because this session specifies logging to a device that lacks available space.

XACT_E_NOISORETAIN

The requested semantics of retention of isolation across retaining commit and abort boundaries cannot be supported by this transaction implementation, or isoFlags was not equal to zero.

XACT_E_NOTIMEOUT

A noninfinite time-out value was requested, but time-outs are not supported by this transaction.

XACT_E_XTIONEXISTS

This session can handle only one extant transaction at a time, and there is presently such a transaction.

The session supports a limited number of nested transactions, and that limit has been reached.

Comments

ITransactionLocal::StartTransaction starts a new local transaction. If there is already an active transaction on the session (that is, StartTransaction has been called with no matching ITransaction::Commit or ITransaction::Abort), the new transaction is started as a nested transaction below the current transaction. Calling ITransaction::Commit or ITransaction::Abort always commits or aborts the transaction at the lowest level, respectively. If the provider does not support nested transactions, calling ITransactionLocal::StartTransaction when there is already an active transaction on the session returns XACT_E_XTIONEXISTS.

See Also

ITransactionOptions::SetOptions