Exemplo n.º 1
0
        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++;
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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;
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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;
        }
Exemplo n.º 9
0
        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;
        }
Exemplo n.º 10
0
        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));
            }
        }
Exemplo n.º 11
0
        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));
            }
        }
Exemplo n.º 12
0
        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));
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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));
        }
Exemplo n.º 15
0
        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;
            }
        }
Exemplo n.º 16
0
        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++;
        }
Exemplo n.º 17
0
 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);
 }