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}); }