Visual C++ .NET/Database ADO.net/Transaction
Transactions
<source lang="csharp">
- include "stdafx.h"
using namespace System; using namespace System::Data; using namespace System::Data::SqlClient; using namespace System::Configuration; void main(){
String ^Name = "Doors"; SqlConnection ^connection = gcnew SqlConnection(); SqlTransaction ^transaction; connection->ConnectionString = "SQLConnection"; try{ connection->Open(); SqlCommand ^cmd = gcnew SqlCommand(); transaction = connection->BeginTransaction(IsolationLevel::Serializable, "AuthorTransaction"); cmd->Connection = connection; cmd->Transaction = transaction; cmd->CommandType = CommandType::StoredProcedure; cmd->CommandText = "InsertAuthor"; cmd->Parameters->Add(gcnew SqlParameter("@LastName", SqlDbType::Char,32)); cmd->Parameters->Add(gcnew SqlParameter("@FirstName",SqlDbType::Char,32)); cmd->Parameters["@LastName"]->Value = "Dope"; cmd->Parameters["@FirstName"]->Value = "John"; int affected = cmd->ExecuteNonQuery(); if (affected <= 0) throw gcnew Exception("Insert Failed"); Console::WriteLine("Insert - {0} rows are affected", affected); cmd->CommandType = CommandType::Text; cmd->CommandText = "UPDATE Authors SET LastName = "Doe" WHERE LastName = "Dope""; affected = cmd->ExecuteNonQuery(); if (affected <= 0) throw gcnew Exception("Insert Failed"); Console::WriteLine("Update - {0} rows are affected", affected); cmd->CommandType = CommandType::Text; cmd->CommandText = "DELETE FROM Authors WHERE LastName = "Does""; affected = cmd->ExecuteNonQuery(); if (affected <= 0) throw gcnew Exception("Insert Failed"); Console::WriteLine("Delete - {0} rows are affected", affected); transaction->Commit(); } catch (Exception ^e) { transaction->Rollback("AuthorTransaction"); Console::WriteLine("Transaction Not completed"); Console::WriteLine("SQL error occurred: {0}", e->Message); } finally { connection->Close(); }
}
</source>
Using Transactions
<source lang="csharp">
- 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(); }
}
</source>