protected override void ExecuteImpl(Stopwatch netTimeStopwatch)
    {
        var parameters   = new Dictionary <string, object>();
        var sqlStatement = CreateSqlStatement(parameters);

        using (var scope = SuppressExistingTransactionScope ? new TransactionScope(TransactionScopeOption.Suppress) : null)
        {
            var connection = EtlConnectionManager.GetConnection(ConnectionString, this);
            try
            {
                lock (connection.Lock)
                {
                    using (var cmd = connection.Connection.CreateCommand())
                    {
                        cmd.CommandTimeout = CommandTimeout;
                        cmd.CommandText    = sqlStatement;
                        cmd.FillCommandParameters(parameters);

                        var transactionId = Transaction.Current.ToIdentifierString();
                        RunCommand(cmd, transactionId, parameters);
                    }
                }
            }
            finally
            {
                EtlConnectionManager.ReleaseConnection(this, ref connection);
            }
        }
    }
Example #2
0
    protected override void ExecuteImpl(Stopwatch netTimeStopwatch)
    {
        using (var scope = SuppressExistingTransactionScope ? new TransactionScope(TransactionScopeOption.Suppress) : null)
        {
            var connection = EtlConnectionManager.GetConnection(ConnectionString, this);
            try
            {
                lock (connection.Lock)
                {
                    var transactionId = Transaction.Current.ToIdentifierString();

                    // todo: support returning parameters
                    var sqlStatements = CreateSqlStatements(ConnectionString, connection.Connection, transactionId);
                    if (sqlStatements.Count > 0)
                    {
                        using (var cmd = connection.Connection.CreateCommand())
                        {
                            cmd.CommandTimeout = CommandTimeout;

                            var startedOn = Stopwatch.StartNew();

                            for (var i = 0; i < sqlStatements.Count; i++)
                            {
                                var sqlStatement = sqlStatements[i];

                                cmd.CommandText = sqlStatement;
                                try
                                {
                                    startedOn.Restart();
                                    RunCommand(cmd, i, startedOn, transactionId);
                                }
                                catch (Exception)
                                {
                                    LogSucceeded(i - 1, transactionId);
                                    throw;
                                }
                            }

                            LogSucceeded(sqlStatements.Count - 1, transactionId);
                        }
                    }
                }
            }
            finally
            {
                EtlConnectionManager.ReleaseConnection(this, ref connection);
            }
        }
    }