Transaction not rolling back
----------------------------

                 Key: DNET-540
                 URL: http://tracker.firebirdsql.org/browse/DNET-540
             Project: .NET Data provider
          Issue Type: Bug
          Components: ADO.NET Provider
    Affects Versions: 2.5.2
         Environment: Windows 7 and 8
            Reporter: pritaeas
            Assignee: Jiri Cincura


When I run the below C# code (.NET 3.5 Framework) with 
FirebirdSql.Data.FirebirdClient V2.5.1 the TransactionScope works as expected, 
not inserting any records at all. If I use the V2.5.2 client then all three 
records are inserted into their respective tables. My connection string 
contains Enlist = true. I've had identical results using a local and remote 
database.

    public partial class frmMain : Form
    {
        private TransactionScopeOption transactionScopeOption;
        private TransactionOptions transactionOptions;

        public frmMain()
        {
            InitializeComponent();

            transactionScopeOption = TransactionScopeOption.Required;
            transactionOptions = new TransactionOptions()
                {
                    IsolationLevel = IsolationLevel.ReadUncommitted,
                    Timeout = TimeSpan.FromMinutes(2)
                };
        }

        private void btnTestFb_Click(object sender, System.EventArgs e)
        {
            FbConnection connection = new 
FbConnection(ConfigurationManager.ConnectionStrings["ConnectionStringFb"].ConnectionString);

            try
            {
                using (TransactionScope scope = new 
TransactionScope(transactionScopeOption, transactionOptions))
                {
                    connection.Open();

                    NestedInserts(connection);

                    scope.Complete();
                }

                connection.Close();

                MessageBox.Show("Done.");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void ExecuteNonQuery(FbConnection connection, string 
commandText)
        {
            using (FbCommand command = new FbCommand(commandText, connection))
            {
                command.ExecuteNonQuery();
            }
        }

        private void NestedInserts(FbConnection connection)
        {
            using (TransactionScope scope = new 
TransactionScope(transactionScopeOption, transactionOptions))
            {
                InsertA(connection);

                scope.Complete();
            }
        }

        private void InsertA(FbConnection connection)
        {
            using (TransactionScope scope = new 
TransactionScope(transactionScopeOption, transactionOptions))
            {
                ExecuteNonQuery(connection, "INSERT INTO TABLE_A (DESCRIPTION) 
VALUES ('A')");

                InsertB(connection);

                scope.Complete();
            }
        }

        private void InsertB(FbConnection connection)
        {
            using (TransactionScope scope = new 
TransactionScope(transactionScopeOption, transactionOptions))
            {
                ExecuteNonQuery(connection, "INSERT INTO TABLE_B (DESCRIPTION) 
VALUES ('B')");

                InsertC(connection);

                scope.Complete();
            }
        }

        private void InsertC(FbConnection connection)
        {
            using (TransactionScope scope = new 
TransactionScope(transactionScopeOption, transactionOptions))
            {
                ExecuteNonQuery(connection, "INSERT INTO TABLE_C (DESCRIPTION) 
VALUES ('C')");

                InsertD(connection);

                scope.Complete();
            }
        }

        private void InsertD(FbConnection connection)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                throw new Exception("Fb exception thrown!");

                scope.Complete();
            }
        }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Firebird-net-provider mailing list
Firebird-net-provider@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/firebird-net-provider

Reply via email to