6.1. Creating a Class That Participates in an Automatic Transaction

Problem

You need to create a .NET class that participates in automatic transactions.

Solution

Use the appropriate custom attributes from the System.EnterpriseServices namespace.

The sample contains a component that participates in automatic transactions. The component has a single method, TranTest( ) , that instructs the transaction to succeed or fail based on an argument success.

The sample also contains code that instantiates the component that participates in the automatic transaction. A checkbox on the form is used to specify the success parameter when the TranTest( ) method is called.

The C# code is shown in Examples Example 6-1 and Example 6-2.

Example 6-1. ServicedComponentCS Project File: SC0601.cs

// Namespaces, variables, and constants
using System.EnterpriseServices;
using System.Runtime.CompilerServices;
using System.Reflection;

//  . . . 

namespace AdoDotNetCookbookCS.ServicedComponentCS
{
    [Transaction(TransactionOption.Required)]
    public class SC0601 : ServicedComponent
    {
        [AutoComplete]
        public void TranTest(bool success)
        {
            //  . . .  Do some work.

            if(success)
            {
                // don't need the next line since AutoComplete
                // ContextUtil.SetComplete( );
            }
            else
            {
                // Vote to abort.
                ContextUtil.SetAbort( );
                // Raise an exception.
                throw new System.Exception(
                    "Error in Serviced Component 0601. " +
                    "Transaction aborted.");
            }
        }
    }
}

Example 6-2. File: AutoTransactionForm.cs

// Namespaces, variables, and constants using System; using ...

Get ADO.NET Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.