Beispiel #1
0
        public static void Enlist(IDbCommand cmd, string connectionString, ConnectionDelegate connection)
        {
            TransactionScope scope = TransactionScope.GetCurrentTx();

            if (scope == null)
            {
                cmd.Connection = connection();
                cmd.Connection.ConnectionString = connectionString;
                cmd.Connection.Open();
            }
            else
            {
                TransactionScope.Transaction transaction = scope.transactions[connectionString] as TransactionScope.Transaction;
                if (transaction == null)
                {
                    //transaction = new TransactionScope.Transaction();
                    IDbConnection conn = connection();
                    conn.ConnectionString = connectionString;
                    conn.Open();
                    transaction = new TransactionScope.Transaction(conn);// This is Roee's Bug Fix
                    if (TransactionScope._isolationLevel != IsolationLevel.Unspecified)
                    {
                        transaction.sqlTx = conn.BeginTransaction(TransactionScope._isolationLevel);
                    }
                    else
                    {
                        transaction.sqlTx = conn.BeginTransaction();
                    }
                    scope.transactions[connectionString] = transaction;
                }
                //cmd.Connection = transaction.sqlTx.Connection;
                cmd.Connection  = transaction.connectionReference; // This is Roee's Bug Fix
                cmd.Transaction = transaction.sqlTx;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Returns false if connection is resused, otherwise true. Make sure to close connection in that case.
        /// </summary>
        /// <param name="cmd"></param>
        /// <param name="connectionString"></param>
        /// <param name="connection"></param>
        /// <returns></returns>
        public static bool OpenConnection(IDbCommand cmd, string connectionString, ConnectionDelegate connection)
        {
            TransactionScope scope = TransactionScope.GetCurrentTx();

            if (scope == null)
            {
                cmd.Connection = connection();
                cmd.Connection.ConnectionString = connectionString;
                cmd.Connection.Open();
                return(true);
            }
            else
            {
                TransactionScope.Transaction transaction = scope.transactions[connectionString] as TransactionScope.Transaction;
                if (transaction == null)
                {
                    cmd.Connection = connection();
                    cmd.Connection.ConnectionString = connectionString;
                    cmd.Connection.Open();
                    return(true);
                }
                else
                {
                    cmd.Connection  = transaction.sqlTx.Connection;
                    cmd.Transaction = transaction.sqlTx;
                    return(false);
                }
            }
        }