/// <summary> /// Applies the change changeScript. /// </summary> /// <param name="changeScript">The changeScript.</param> /// <param name="scriptContent"></param> /// <param name="output">The output from applying the change changeScript.</param> protected void ApplyChangeScript(ChangeScript changeScript, string scriptContent, StringBuilder output) { var statements = splitter.Split(scriptContent); var i = 0; foreach (var statement in statements) { try { queryExecuter.BeginTransaction(); if (statements.Count > 1) { infoTextWriter.WriteLine(" -> statement " + (i + 1) + " of " + statements.Count + "..."); } queryExecuter.Execute(statement, output); i++; } catch (DbException e) { throw new ChangeScriptFailedException(e, changeScript, i + 1, statement); } finally { // Write out SQL execution output. if (output.Length > 0) { infoTextWriter.WriteLine(output.ToString()); } try { // Commit transaction queryExecuter.CommitTransaction(); } catch (Exception e) { output.Clear(); infoTextWriter.WriteLine(e.ToString()); output.AppendLine(e.Message); RecordScriptStatus(changeScript, ScriptStatus.Failure, output.ToString()); } } } }
private static int RunSql(NameValueCollection parameters) { var connectionStrings = parameters["connection-strings"]; var connectionStringsFile = parameters["connection-strings-file"]; var queryFile = parameters["query-file"]; var resultConnectionString = parameters["result-connection-string"]; var dumpSql = parameters["dump-sql"]; var historyMode = parameters["history-mode"]; var parametersAreValid = (!string.IsNullOrEmpty(connectionStrings) || !string.IsNullOrEmpty(connectionStringsFile)) && !string.IsNullOrEmpty(queryFile) && !string.IsNullOrEmpty(resultConnectionString); if (!parametersAreValid) { Console.Out.WriteLine("Invalid arguments"); Console.Out.WriteLine( "Usage: Generator.exe -cmd run-sql [-connection-strings <1c db connection strings comma delimited> | -connection-strings-file <connection strings with areas>] -query-file <path to file with 1c query> -result-connection-string <where to put results> [-dump-sql true] [-history-mode true]"); return(-1); } var querySources = string.IsNullOrEmpty(connectionStrings) ? StringHelpers.ParseLinesWithTabs(File.ReadAllText(connectionStringsFile), (s, items) => new QuerySource { db = new PostgreeSqlDatabase(s), areas = items.Select(int.Parse).ToArray() }) : connectionStrings.Split(',') .Select(x => new QuerySource { db = new PostgreeSqlDatabase(x), areas = new int[0] }); var target = new MsSqlDatabase(resultConnectionString); var queryText = File.ReadAllText(queryFile); var targetTableName = Path.GetFileNameWithoutExtension(queryFile); var sqlExecuter = new QueryExecuter(querySources.ToArray(), target, queryText, targetTableName, dumpSql == "true", historyMode == "true"); var succeeded = sqlExecuter.Execute(); return(succeeded ? 0 : -1); }