How to: Use Transactions with OLE DB (Programmatically)

In this topic, you will learn how to use transactions when programming with the OLE DB provider for SQL Server Compact 4.0.

Example

The following example shows how to create and run a transaction by using the OLE DB Provider for SQL Server Compact 4.0. The example contains only the transaction-related sections of the InsertEmployeeInfo function.

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