Distributed transactions
The example in this topic uses pseudo-code to demonstrate how to use distributed transactions.
...;
using System.EnterpriseServices;
using Informix.Net.Core;
...;
[assembly: AssemblyKeyFile("test.snk")]
...;
public static void Main()
{
...;
/* The 'using' construct below results in a call to Dispose on
exiting the curly braces. It is important to dispose of COM+
objects as soon as possible, so that COM+ services such as
Object Pooling work properly */
using (TwoPhaseTxn txn = new TwoPhaseTxn)
{
txn.TestAutoComplete_Exception();
}
using (TwoPhaseTxn txn = new TwoPhaseTxn)
{
txn.TestAutoComplete_TransactionVote();
}
...;
}
//Transaction attributes specify the type of transaction requested
[Transaction(TransactionOption.RequiresNew)]
public class TwoPhaseTxn : ServicedComponent
{
[AutoComplete]
public void TestAutoComplete_Exception()
{
IfxConnection ifxConn1 = new IfxConnection(“db=db1;server=srv1;
enlist=true;”);
IfxConnection ifxConn2 = new IfxConnection(“db=db2;server=srv2;
enlist=true;”);
try
{
// db operation on ifxConn1
}
catch
{
// throw exception
}
try
{
// db operation on ifxConn2
}
catch
{
// throw exception
}
}
[AutoComplete]
public void TestAutoComplete_TransactionVote()
{
IfxConnection ifxConn1 = new IfxConnection(“db=db1;server=srv1;
enlist=true;”);
IfxConnection ifxConn2 = new IfxConnection(“db=db2;server=srv2;
enlist=true;”);
try
{
// db operation on ifxConn1
}
catch
{
// In case of any failure, flag abort
ContextUtil.MyTransactionVote = TransactionVote.Abort
}
try
{
// db operation on ifxConn2
}
catch
{
// In case of any failure, flag abort
ContextUtil.MyTransactionVote = TransactionVote.Abort
}
}