private void ExecuteScript(ScriptAccessor scriptAccessor)
        {
            using (var connection = Configuration.GetConnection())
            {                
                connection.InfoMessage += InfoMessage;

                using (var txn = connection.BeginTransaction())
                {
                    try
                    {
                        var script = scriptAccessor.Read();

                        var commands = Regex.Split(script, @"(?m)^\s*GO\s*\d*\s*$", 
                            RegexOptions.IgnoreCase);

                        foreach (var c in commands.Where(q => !string.IsNullOrEmpty(q)))
                        {
                            new SqlCommand(c, connection, txn).ExecuteNonQuery();
                        }

                        txn.Commit();
                    }
                    catch
                    {
                        txn.Rollback();
                        throw;
                    }
                    finally
                    {
                        connection.InfoMessage -= InfoMessage;
                    }
                }
            }
        }
        private string ExecuteScriptOnMaster(ScriptAccessor scriptAccessor)
        {
            var output = _runner.Run(
                _сonnectionStringBuilder.DataSource,
                _сonnectionStringBuilder.UserID,
                _сonnectionStringBuilder.Password,
                scriptAccessor.GetFullPath());

            return output;
        }
 protected void RaiseOnScriptFailure(ScriptAccessor script, Exception exception)
 {
     var evt = OnScriptExecuted;
     if (evt != null)
     {
         var result = new ScriptRunResult {Script = script};
         result.RecordError(exception.Message);
         evt(result);
     }
 }
        public void Apply(string statement)
        {
            var file = Path.GetTempFileName();
            File.WriteAllText(file, statement);

            var scriptAccessor = new ScriptAccessor(file);

            try
            {
                this.Apply(new Step {Scripts = new[] {scriptAccessor}});
                RaiseOnScriptSuccess(scriptAccessor);
            }
            catch (Exception scriptApplicationException)
            {
                RaiseOnScriptFailure(scriptAccessor, scriptApplicationException);
            }
            finally
            {
                File.Delete(file);
            }
        }
 protected void RaiseOnScriptSuccess(ScriptAccessor script)
 {
     var evt = this.OnScriptExecuted;
     if (evt != null)
         evt(new ScriptRunResult {Script = script});
 }