MDAC 2.5 SDK - OLE DB Programmer's Reference
OLE DB Interfaces
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