방법: OLE DB에서 트랜잭션 사용(프로그래밍 방식)

이 항목에서는 SQL Server Compact 4.0용 OLE DB 공급자로 프로그래밍할 때 트랜잭션을 사용하는 방법에 대해 설명합니다.

다음 예에서는 SQL Server Compact 4.0용 OLE DB 공급자를 사용하여 트랜잭션을 만들고 실행하는 방법을 보여 줍니다. 이 예는 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.
표시: