如何通过 OLE DB 使用事务(以编程方式)
本主题将介绍如何在通过 OLE DB Provider for SQL Server 2005 Compact Edition (SQL Server Compact Edition) 进行编程时使用事务。
示例
下面的示例显示了如何通过使用 OLE DB Provider for SQL Server Compact Edition 创建和运行事务。该示例仅包含 InsertEmployeeInfo 函数的事务相关的部分。
///////////////////////////////////////////////////////////////////////
// The following steps have been removed from this sample.
// 1) Verify that IDBCreateSession exists on the datasource.
// 2) Create a session object.
// 3) Set up information necessary to open a table by using an index.
// 4) Set the binding properties and create the accessor.
///////////////////////////////////////////////////////////////////////
// Begins a new local transaction to insert employee data
hr = pITxnLocal->StartTransaction(ISOLATIONLEVEL_READCOMMITTED, 0, NULL, NULL);
// Error handling for failed creation of the transaction
if(FAILED(hr))
{
goto Exit;
}
///////////////////////////////////////////////////////////////////////
// The code to prepare the sample data to insert has been removed.
//
///////////////////////////////////////////////////////////////////////
hr = pIRowsetChange->InsertRow(DB_NULL_HCHAPTER, hAccessor, pData, prghRows);
// Error handling that aborts the transaction on failure
if (FAILED(hr))
{
goto Abort;
}
// Get the row data.
hr = pIRowset->GetData(rghRows[0], hAccessor, pData);
if(FAILED(hr))
{
goto Abort;
}
// Check the status.
if (DBSTATUS_S_OK != *(DBSTATUS*)(pData+prgBinding[dwPhotoCol].obStatus))
{
hr = E_FAIL;
pIRowset->ReleaseRows(1, prghRows, NULL, NULL, NULL);
goto Abort;
}
///////////////////////////////////////////////////////////////////////
// Perform a transactional task here.
///////////////////////////////////////////////////////////////////////
// Commit the transaction by using ITransactionLocal::Commit
// to insert the data.
if (pITxnLocal)
{
pITxnLocal->Commit(FALSE, XACTTC_SYNC, 0);
}
goto Exit;
// Calling goto Abort uses the ITransactionLocal::Abort
// to cancel the transaction.
Abort:
// Cancel the transaction.
if (pITxnLocal)
{
pITxnLocal->Abort(NULL, FALSE, FALSE);
}
Exit:
// Release the resources.