Using Transactions
#include "stdafx.h" using namespace System; using namespace System::Data; using namespace System::Data::OleDb; ref struct MyEventHandler { static void RowUpdated(Object^ sender, OleDbRowUpdatedEventArgs^ e) { if ( e->Status == UpdateStatus::ErrorsOccurred ) throw "Row update failed!"; } }; void main() { OleDbConnection^ myConnection = nullptr; OleDbTransaction^ myTransaction = nullptr; try { myConnection = gcnew OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Music.mdb"); myConnection->Open(); OleDbDataAdapter^ dataAdapter = gcnew OleDbDataAdapter("SELECT * FROM Music", myConnection); OleDbCommandBuilder^ commandBuilder = gcnew OleDbCommandBuilder(dataAdapter); dataAdapter->UpdateCommand = commandBuilder->GetUpdateCommand(); dataAdapter->RowUpdated += gcnew OleDbRowUpdatedEventHandler(MyEventHandler::RowUpdated); DataSet^ myDataSet = gcnew DataSet(); dataAdapter->MissingSchemaAction = MissingSchemaAction::AddWithKey; dataAdapter->Fill(myDataSet); myTransaction = myConnection->BeginTransaction(); DataTable^ myTable = myDataSet->Tables[0]; DataRow^ row = myTable->Rows->Find("Automatic"); if ( row != nullptr ) row["Title"] = "Automatic (Dance Mix)"; row = myTable->Rows->Find("EnTrance"); if ( row != nullptr ) row["GenreName"] = "Trance"; dataAdapter->Update(myDataSet); myTransaction->Commit(); } catch(Exception^ e) { Console::WriteLine(e->Message); if ( myTransaction != nullptr ) { myTransaction->Rollback(); Console::WriteLine("Transaction rolled back."); } } finally { myConnection->Close(); } }