private void ExecuteScript(UpdateScript scriptInfo) { FileInfo file = new FileInfo(scriptInfo.FullFileName); StreamReader fileStream = file.OpenText(); string scriptText = fileStream.ReadToEnd(); fileStream.Close(); string connectionString = _settings.ConnectionString; if (_commandLineParams != null && !string.IsNullOrEmpty(_commandLineParams.ConnectionString)) { connectionString = _commandLineParams.ConnectionString; } using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); IEnumerable <string> statements = SplitSqlStatements(scriptText); foreach (string statement in statements) { ExecuteSqlCommand(statement, conn); } } scriptInfo.Executed = DateTime.Now; RaiseUpdateProgerss("{0} Executed", scriptInfo.File); _log.Log(LogLevel.Info, String.Format("{0} Executed. Full file name: {1}", scriptInfo.File, scriptInfo.FullFileName)); _executedCount++; }
private void AddScriptNode(List <UpdateScript> source, XmlNode node) { if (node.Attributes == null) { throw new ApplicationException("Wrong XML file. Script node does not have attributes"); } XmlAttributeCollection attributes = node.Attributes; XmlAttribute fileNameAttribute = attributes["file"]; if (fileNameAttribute == null) { throw new ApplicationException("Wrong XML file. attribute file is missed"); } string fullPath = Path.Combine(_fileConfig.ScriptsRootFolder, fileNameAttribute.Value); UpdateScript scriptFile = new UpdateScript(); FileInfo info = new FileInfo(fullPath); FileHelper.FillUpdateScriptFromFileInto(scriptFile, info); scriptFile.Author = ReadAttributeFromNode("author", attributes); scriptFile.Description = ReadAttributeFromNode("description", attributes); scriptFile.DoNotRegisterInDatabase = ReadBool(ReadAttributeFromNode("donotregisterscriptindatabase", attributes)); scriptFile.DoNotStoreFileExtensionInDatabase = ReadBool(ReadAttributeFromNode("donotstorefileextensionindatabase", attributes)); scriptFile.File = fileNameAttribute.Value; source.Add(scriptFile); }
private void RunScriptsWithoutVerification(List <UpdateScript> list) { UpdateScript currentScript = null; try { foreach (var initScript in list) { currentScript = initScript; ExecuteScript(currentScript); } foreach (var initScript in list) { currentScript = initScript; currentScript.Status = UpdateScriptStatus.Ok; AddNewScript(initScript); } } catch (Exception ex) { var error = new ApplicationException( string.Format("Initial script execution failed file:{0}, {1}.", currentScript.FullFileName, ex.Message), ex); throw error; } }
private void AddScriptNode(List<UpdateScript> source, FileInfo info) { UpdateScript scriptFile = new UpdateScript(); scriptFile.DoNotRegisterInDatabase = _directoryConfig.DoNotRegisterScriptInDatabase; scriptFile.DoNotStoreFileExtensionInDatabase = _directoryConfig.DoNotStoreFileExtensionInDatabase; FileHelper.FillUpdateScriptFromFileInto(scriptFile, info); source.Add(scriptFile); }
private void RunScript(UpdateScript script) { UpdateScriptRegisteredData inDb = null; bool registerBeforeRun = false; try { inDb = GetRegistedScriptData(script.DoNotStoreFileExtensionInDatabase, script.File); if (!IsNeedToRun(inDb)) { return; } script.Status = UpdateScriptStatus.InProgress; registerBeforeRun = ShouldRegisterBeforeExecution(); if (registerBeforeRun) { if (inDb == null) { AddNewScript(script); } else { inDb.Status = UpdateScriptStatus.InProgress; UpdateStatus(inDb); } } ExecuteScript(script); inDb = GetRegistedScriptData(script.DoNotStoreFileExtensionInDatabase, script.File); script.Status = UpdateScriptStatus.Ok; if (inDb == null) { AddNewScript(script); } else { UpdateScriptInfo(script); } } catch (Exception ex) { var message = String.Format("Script execution file: {0} failed. {1}", script.FullFileName, ex.Message); var error = new ApplicationException(message, ex); script.Status = UpdateScriptStatus.Error; if (registerBeforeRun && (inDb != null)) { UpdateScriptInfo(script); } throw error; } }
private void AddScriptNode(List <UpdateScript> source, FileInfo info) { UpdateScript scriptFile = new UpdateScript(); scriptFile.DoNotRegisterInDatabase = _directoryConfig.DoNotRegisterScriptInDatabase; scriptFile.DoNotStoreFileExtensionInDatabase = _directoryConfig.DoNotStoreFileExtensionInDatabase; FileHelper.FillUpdateScriptFromFileInto(scriptFile, info); source.Add(scriptFile); }
private void AddSqlParams(SqlCommand command, UpdateScript script) { AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.UpdateStatusField, GetDbStatusValueByEnum(script.Status)); string registeredScriptName = GetRegisteredNameByScriptName(script.DoNotStoreFileExtensionInDatabase, script.File); AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.XmlMappedData.FileField, registeredScriptName); AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.XmlMappedData.AuthorField, script.Author); AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.XmlMappedData.DescriptionField, script.Description); AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.RunDateField, script.Executed); }
public static void FillUpdateScriptFromFileInto(UpdateScript scriptFile, FileInfo info) { if (!info.Exists) { throw new FileNotFoundException(string.Format("Script file {0} not found", info.FullName), info.FullName); } scriptFile.FullFileName = info.FullName; DateTime date = info.LastWriteTime; scriptFile.FileModifiedDate = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, 0); scriptFile.File = info.Name; }
private void UpdateScriptInfo(UpdateScript script) { if (script.DoNotRegisterInDatabase) { return; } StringBuilder fieldValues = new StringBuilder(); string updateTemplateLine; if (_settings.UpdateFromXMLEvenIfXMLEmpty) { updateTemplateLine = "{0} = @{0}"; } else { updateTemplateLine = "{0} = ISNULL(@{0}, {0})"; } AddTextParams(fieldValues, updateTemplateLine); string registeredScriptName = GetRegisteredNameByScriptName(script.DoNotStoreFileExtensionInDatabase, script.File); string updateTemplate = " Update {0} SET {1} where {2} = '{3}'"; string commandText = string.Format(updateTemplate, _settings.ScriptsDbTable.TableName, fieldValues, _settings.ScriptsDbTable.XmlMappedData.FileField, registeredScriptName); using (SqlConnection conn = new SqlConnection(_settings.ConnectionString)) { conn.Open(); SqlCommand command = new SqlCommand(commandText, conn); AddSqlParams(command, script); command.ExecuteNonQuery(); command.Dispose(); } if (script.Status.HasValue && !string.IsNullOrEmpty(_settings.ScriptsDbTable.UpdateStatusField)) { RaiseUpdateProgerss(String.Format("{0} registration updated, new Status: {1}", script.File, script.Status)); } else { RaiseUpdateProgerss(String.Format("{0} registration updated", script.File)); } }
private void AddNewScript(UpdateScript script) { if (script.DoNotRegisterInDatabase) { return; } StringBuilder fieldNames = new StringBuilder(); AddTextParams(fieldNames, "{0}"); StringBuilder fieldValues = new StringBuilder(); AddTextParams(fieldValues, "@{0}"); string template = " INSERT INTO {0} ({1}) VALUES({2})"; string commandText = string.Format(template, _settings.ScriptsDbTable.TableName, fieldNames, fieldValues); using (SqlConnection conn = new SqlConnection(_settings.ConnectionString)) { conn.Open(); SqlCommand command = new SqlCommand(commandText, conn); script.Executed = DateTime.Now; AddSqlParams(command, script); command.ExecuteNonQuery(); command.Dispose(); } if (script.Status.HasValue && !string.IsNullOrEmpty(_settings.ScriptsDbTable.UpdateStatusField)) { RaiseUpdateProgerss(String.Format("{0} registered, status: {1}", script.File, script.Status)); } else { RaiseUpdateProgerss(String.Format("{0} registered", script.File)); } }
private void AddNewScript(UpdateScript script) { if (script.DoNotRegisterInDatabase) return; StringBuilder fieldNames = new StringBuilder(); AddTextParams(fieldNames, "{0}"); StringBuilder fieldValues = new StringBuilder(); AddTextParams(fieldValues, "@{0}"); string template = " INSERT INTO {0} ({1}) VALUES({2})"; string commandText = string.Format(template, _settings.ScriptsDbTable.TableName, fieldNames, fieldValues); using (SqlConnection conn = new SqlConnection(_settings.ConnectionString)) { conn.Open(); SqlCommand command = new SqlCommand(commandText, conn); script.Executed = DateTime.Now; AddSqlParams(command, script); command.ExecuteNonQuery(); command.Dispose(); } if (script.Status.HasValue && !string.IsNullOrEmpty(_settings.ScriptsDbTable.UpdateStatusField)) RaiseUpdateProgerss(String.Format("{0} registered, status: {1}", script.File, script.Status)); else RaiseUpdateProgerss(String.Format("{0} registered", script.File)); }
private void AddScriptNode(List<UpdateScript> source, XmlNode node) { if (node.Attributes == null) throw new ApplicationException("Wrong XML file. Script node does not have attributes"); XmlAttributeCollection attributes = node.Attributes; XmlAttribute fileNameAttribute = attributes["file"]; if (fileNameAttribute == null) throw new ApplicationException("Wrong XML file. attribute file is missed"); string fullPath = Path.Combine(_fileConfig.ScriptsRootFolder, fileNameAttribute.Value); UpdateScript scriptFile = new UpdateScript(); FileInfo info = new FileInfo(fullPath); FileHelper.FillUpdateScriptFromFileInto(scriptFile, info); scriptFile.Author = ReadAttributeFromNode("author", attributes); scriptFile.Description = ReadAttributeFromNode("description", attributes); scriptFile.DoNotRegisterInDatabase = ReadBool(ReadAttributeFromNode("donotregisterscriptindatabase", attributes)); scriptFile.DoNotStoreFileExtensionInDatabase = ReadBool(ReadAttributeFromNode("donotstorefileextensionindatabase", attributes)); scriptFile.File = fileNameAttribute.Value; source.Add(scriptFile); }
private void UpdateScriptInfo(UpdateScript script) { if (script.DoNotRegisterInDatabase) return; StringBuilder fieldValues = new StringBuilder(); string updateTemplateLine; if (_settings.UpdateFromXMLEvenIfXMLEmpty) { updateTemplateLine = "{0} = @{0}"; } else { updateTemplateLine = "{0} = ISNULL(@{0}, {0})"; } AddTextParams(fieldValues, updateTemplateLine); string registeredScriptName = GetRegisteredNameByScriptName(script.DoNotStoreFileExtensionInDatabase, script.File); string updateTemplate = " Update {0} SET {1} where {2} = '{3}'"; string commandText = string.Format(updateTemplate, _settings.ScriptsDbTable.TableName, fieldValues, _settings.ScriptsDbTable.XmlMappedData.FileField, registeredScriptName); using (SqlConnection conn = new SqlConnection(_settings.ConnectionString)) { conn.Open(); SqlCommand command = new SqlCommand(commandText, conn); AddSqlParams(command, script); command.ExecuteNonQuery(); command.Dispose(); } if (script.Status.HasValue && !string.IsNullOrEmpty(_settings.ScriptsDbTable.UpdateStatusField)) RaiseUpdateProgerss(String.Format("{0} registration updated, new Status: {1}", script.File, script.Status)); else RaiseUpdateProgerss(String.Format("{0} registration updated", script.File)); }
private void RunScript(UpdateScript script) { UpdateScriptRegisteredData inDb = null; bool registerBeforeRun = false; try { inDb = GetRegistedScriptData(script.DoNotStoreFileExtensionInDatabase, script.File); if (!IsNeedToRun(inDb)) return; script.Status = UpdateScriptStatus.InProgress; registerBeforeRun = ShouldRegisterBeforeExecution(); if (registerBeforeRun) { if (inDb == null) { AddNewScript(script); } else { inDb.Status = UpdateScriptStatus.InProgress; UpdateStatus(inDb); } } ExecuteScript(script); inDb = GetRegistedScriptData(script.DoNotStoreFileExtensionInDatabase, script.File); script.Status = UpdateScriptStatus.Ok; if (inDb == null) { AddNewScript(script); } else { UpdateScriptInfo(script); } } catch (Exception ex) { var message = String.Format("Script execution file: {0} failed. {1}", script.FullFileName, ex.Message); var error = new ApplicationException(message, ex); script.Status = UpdateScriptStatus.Error; if (registerBeforeRun && (inDb != null)) { UpdateScriptInfo(script); } throw error; } }
private void ExecuteScript(UpdateScript scriptInfo) { FileInfo file = new FileInfo(scriptInfo.FullFileName); StreamReader fileStream = file.OpenText(); string scriptText = fileStream.ReadToEnd(); fileStream.Close(); string connectionString = _settings.ConnectionString; if (_commandLineParams != null && !string.IsNullOrEmpty(_commandLineParams.ConnectionString)) connectionString = _commandLineParams.ConnectionString; using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); IEnumerable<string> statements = SplitSqlStatements(scriptText); foreach (string statement in statements) { ExecuteSqlCommand(statement, conn); } } scriptInfo.Executed = DateTime.Now; RaiseUpdateProgerss("{0} Executed", scriptInfo.File); _log.Log(LogLevel.Info, String.Format("{0} Executed. Full file name: {1}", scriptInfo.File, scriptInfo.FullFileName)); _executedCount++; }
private void AddSqlParams(SqlCommand command, UpdateScript script) { AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.UpdateStatusField, GetDbStatusValueByEnum(script.Status)); string registeredScriptName = GetRegisteredNameByScriptName(script.DoNotStoreFileExtensionInDatabase,script.File); AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.XmlMappedData.FileField, registeredScriptName); AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.XmlMappedData.AuthorField, script.Author); AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.XmlMappedData.DescriptionField, script.Description); AddCommandParamIfRequired(command.Parameters, _settings.ScriptsDbTable.RunDateField, script.Executed); }