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(); } }