A Simpler TransactionScope


In .Net 3.5 I can write a transactional code block as follows:

transacted(()=>
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();

SqlCommand command1 = new SqlCommand(commandString1, connection);
command1.ExecuteNonQuery();

SqlCommand command2 = new SqlCommand(commandString2, connection);
command2.ExecuteNonQuery();
}
});


No need for using and no need to remember to call Complete at the end of the block.


To enable this I need to write just a few lines of code:

delegate void TransactedCodeDelegate();
void transacted(TransactedCodeDelegate txCode)
{
using (TransactionScope ts = new TransactionScope())
{
txCode();
ts.Complete();
}
}

Comments (3)

  1. florinlazar says:

    And yes, you can do this in C# 2.0 too using "delegate()" instead of "()=>".

  2. Florin Lazar says:

    If you read the documentation for TransactionScope , you will find: "If no exception occurs within the