/// <summary> /// Creates a new configuration handler and adds it to the section handler collection. /// </summary> /// <param name="parent">The configuration settings in a corresponding parent configuration section. </param> /// <param name="configContext">The virtual path for which the configuration section handler computes configuration values. Normally this parameter is reserved and is a null reference </param> /// <param name="section">The XmlNode that contains the configuration information to be handled. Provides direct access to the XML contents of the configuration section. </param> /// <returns></returns> public object Create(object parent, object configContext, System.Xml.XmlNode section) { MigrationSettings settings = new MigrationSettings(); string ID; VersionSetting setting; foreach (XmlNode version in section.ChildNodes) { if (version.Name == "CurrentVersion") { ID = version.Attributes["ID"].Value.Trim(); if (ID == "") { throw new ApplicationException("CurrentVersion ID can not be empty"); } setting = new VersionSetting(ID); foreach (XmlNode step in version.ChildNodes) { if (step.Name == "Step") { setting.AddStep(step.Attributes["Description"].Value, step.Attributes["Script"].Value); } } settings.AddVersion(ID, setting); } } return(settings); }
/// <summary> /// Installs the database /// </summary> public void InstallDatabase() { string connectionString; string sql; string webUserName; string newVersion; string containsRptSQLJob; containsRptSQLJob = "yes"; connectionString = ""; webUserName = ""; try { if (ApplicationState.RptWebUsername != null) { if (ApplicationState.RptWebUserType.Equals(SqlUserType.IntegratedUser)) { webUserName = ApplicationState.RptWebNTUsername; } } if ((webUserName == "") || (webUserName == null)) { webUserName = ApplicationState.RptWebUsername; } } catch { DialogResult r = MessageBox.Show("ApplicationState.Exception trying to read UserName", "info", MessageBoxButtons.OK); } try { containsRptSQLJob = ConfigurationSettings.AppSettings["ContainsRptSQLJob"]; } catch { DialogResult r = MessageBox.Show("ConfigurationSettings.AppSettings.Exception trying to read ContainsRptSQLJob", "info", MessageBoxButtons.OK); } try { try { connectionString = SqlTool.GetConnectionString(ApplicationState.RptServerName, ApplicationState.RptDatabaseName, ApplicationState.RptDboUserType, ApplicationState.RptDboUsername, ApplicationState.RptDboPassword); } catch { DialogResult r = MessageBox.Show("ConfigurationSettings.AppSettings.Exception trying to build connectionstring", "info", MessageBoxButtons.OK); } //DialogResult r2 = MessageBox.Show("connectionString=" + connectionString, "info", MessageBoxButtons.YesNo); //1. Install schema String ErrorNum = "0"; if (ApplicationState.RptInstallVersion != "") { try { MigrationSettings settingsa = (MigrationSettings)ConfigurationSettings.GetConfig("MigrationSettings"); ErrorNum = "1"; } catch { DialogResult r = MessageBox.Show("ConfigurationSettings.GetConfig.Exception trying to read MigrationSettings", "info", MessageBoxButtons.OK); } try { MigrationSettings settingsb = (MigrationSettings)ConfigurationSettings.GetConfig("MigrationSettings"); VersionSetting versionSettingb = settingsb.GetVersion(ApplicationState.RptInstallVersion); ErrorNum = "2"; } catch { DialogResult r = MessageBox.Show("settings.GetVersion.Exception trying to read RptInstallVersion", "info", MessageBoxButtons.OK); } try { MigrationSettings settingsc = (MigrationSettings)ConfigurationSettings.GetConfig("MigrationSettings"); VersionSetting versionSettingc = settingsc.GetVersion(ApplicationState.RptInstallVersion); NameValueCollection stepsc = versionSettingc.Steps; ErrorNum = "3"; } catch { DialogResult r = MessageBox.Show("NameValueCollection.Exception trying to read versionSettingc.Steps", "info", MessageBoxButtons.OK); } MigrationSettings settings = (MigrationSettings)ConfigurationSettings.GetConfig("MigrationSettings"); VersionSetting versionSetting = settings.GetVersion(ApplicationState.RptInstallVersion); NameValueCollection steps = versionSetting.Steps; ErrorNum = "4"; int stepsCount, step; step = 0; stepsCount = steps.Count; foreach (string description in steps.AllKeys) { try { step++; if (this.cancel) { System.Windows.Forms.Application.Exit(); } sql = ""; ErrorNum = "5"; try { sql = SqlTool.ReadScript(steps[description]); } catch { DialogResult r = MessageBox.Show("Null NAME in NAME-VALUE collection", "info", MessageBoxButtons.OK); } /* * -- Parameters: * -- This values will be set in the deployment process * -- {0} Databasename * -- {1} WEB SQL Login * -- {2} Salt Administrator username * -- {3} Salt Administrator password */ //-- We don't want language translation {0} type place holders to be replaced. if (description == "Optimising Reports" || description == "Creating SQL server Job") { sql = String.Format(sql, ApplicationState.RptDatabaseName.Replace("'", "''"), webUserName.Replace("'", "''"), ApplicationState.RptAdminUsername.Replace("'", "''"), ApplicationState.RptAdminPassword.Replace("'", "''") ); } ErrorNum = "6"; if (this.cancel) { System.Windows.Forms.Application.Exit(); } this.lblStatus.Text = description + "..."; SqlTool.Execute(connectionString, sql); this.prgStatus.Value = Convert.ToInt16((step * 1.0 / stepsCount) * 90.00); } catch (Exception ex) { this.lblError.Text += ex.Message + "\n"; MessageBox.Show(" Error " + ErrorNum + ex.Message + Environment.NewLine + ex.StackTrace); Thread.Sleep(1000); } } //Update Version try { this.lblStatus.Text = "Set Application Version" + "..."; sql = ConfigurationSettings.AppSettings["SetVersionScript"]; newVersion = ConfigurationSettings.AppSettings["NewVersionID"]; sql = String.Format(sql, newVersion.Replace("'", "''")); SqlTool.Execute(connectionString, sql); } catch (Exception ex) { MessageBox.Show(" Error 77 " + ex.Message + Environment.NewLine + ex.StackTrace); Thread.Sleep(1000); } } //2. Grant Web SQL Login access permission try { if (ApplicationState.RptWebGrantPermission) { this.lblStatus.Text = "Grant Web SQL Login access permission" + "..."; sql = ConfigurationSettings.AppSettings["GrantPermissionScript"]; DialogResult r = MessageBox.Show("Are you sure you wish to Grant permissions to " + webUserName, "Confirm", MessageBoxButtons.YesNo); bool ok = (r == DialogResult.Yes); if (ok) { sql = String.Format(sql, webUserName.Replace("'", "''")); SqlTool.Execute(connectionString, sql); } //sql = String.Format(sql, webUserName.Replace("'", "''")); this.prgStatus.Value = 90; } } catch (Exception ex) { MessageBox.Show(" The stored procedure that Grants Web SQL Login access permission failed with error:" + ex.Message + Environment.NewLine + ex.StackTrace); Thread.Sleep(1000); this.prgStatus.Value = 90; } //3. Set database connection try { String strRptServer = ""; String strRptDatabase = ""; SqlUserType strRptWebUserType = SqlUserType.IntegratedUser; String strRptWebUserName = ""; String strPassword = ""; this.lblStatus.Text = "Set database connection" + "..."; try { strRptServer = ApplicationState.RptServerName; } catch (Exception ex) { MessageBox.Show(" Error 80: ApplicationState.RptServerName is null" + ex.Message + Environment.NewLine + ex.StackTrace); } if (strRptServer == null) { MessageBox.Show(" Error 81: ApplicationState.RptServerName is null"); } try { strRptDatabase = ApplicationState.RptDatabaseName; } catch (Exception ex) { MessageBox.Show(" Error 80: ApplicationState.RptDatabaseName is null" + ex.Message + Environment.NewLine + ex.StackTrace); } if (strRptDatabase == null) { MessageBox.Show(" Error 81: ApplicationState.RptDatabaseName is null"); } try { strRptWebUserType = ApplicationState.RptWebUserType; } catch (Exception ex) { MessageBox.Show(" Error 80: ApplicationState.RptWebUserType is null" + ex.Message + Environment.NewLine + ex.StackTrace); } if (strRptWebUserType == null) { MessageBox.Show(" Error 81: ApplicationState.RptWebUserType is null"); } try { strRptWebUserName = ApplicationState.RptWebUsername; } catch (Exception ex) { MessageBox.Show(" Error 80: ApplicationState.RptWebUsername is null" + ex.Message + Environment.NewLine + ex.StackTrace); } if (strRptWebUserName == null) { MessageBox.Show(" Error 81: ApplicationState.RptWebUsername is null"); } try { strPassword = ApplicationState.RptWebPassword; } catch (Exception ex) { MessageBox.Show(" Error 80: ApplicationState.RptWebPassword is null" + ex.Message + Environment.NewLine + ex.StackTrace); } if (strPassword == null) { MessageBox.Show(" Error 81: ApplicationState.RptWebPassword is null"); } string strWebConnectionString = ""; try { strWebConnectionString = SqlTool.GetConnectionString( strRptServer, strRptDatabase, strRptWebUserType, strRptWebUserName, strPassword); } catch (Exception ex) { MessageBox.Show(" Error 80: strWebConnectionString is null" + ex.Message + Environment.NewLine + ex.StackTrace); } this.UpdateWebConfig(strWebConnectionString, ApplicationState.RptWebPassword); this.prgStatus.Value = 100; } catch (Exception ex) { MessageBox.Show(" Error 80 " + ex.Message + Environment.NewLine + ex.StackTrace); Thread.Sleep(1000); this.prgStatus.Value = 100; } Thread.Sleep(1000); this.Hide(); if (containsRptSQLJob.ToLower() == "yes") { MessageBox.Show("Please notify the database administrator that SQL Server Agent must be running in order to do background processing"); } FrmRptComplete.Form.ShowDialog(); } catch (Exception ex) { MessageBox.Show("Error 78:" + ex.Message + Environment.NewLine + ex.StackTrace); Thread.Sleep(1000); System.Windows.Forms.Application.Exit(); } }
/// <summary> /// Adds a version /// </summary> /// <param name="ID"></param> /// <param name="version"></param> public void AddVersion(string ID, VersionSetting version) { this._Versions.Add(ID, version); }
/// <summary> /// Installs the database /// </summary> public void InstallDatabase() { string connectionString; string sql; string webUserName; string newVersion; string containsSQLJob; if (ApplicationState.WebUserType == SqlUserType.IntegratedUser) { webUserName = ApplicationState.WebNTUsername; } else { webUserName = ApplicationState.WebUsername; } containsSQLJob = ConfigurationSettings.AppSettings["ContainsSQLJob"]; try { connectionString = SqlTool.GetConnectionString(ApplicationState.ServerName, ApplicationState.DatabaseName, ApplicationState.DboUserType, ApplicationState.DboUsername, ApplicationState.DboPassword); //1. Install schema if (ApplicationState.InstallVersion != "") { MigrationSettings settings = (MigrationSettings)ConfigurationSettings.GetConfig("MigrationSettings"); VersionSetting versionSetting = settings.GetVersion(ApplicationState.InstallVersion); NameValueCollection steps = versionSetting.Steps; int stepsCount, step; step = 0; stepsCount = steps.Count; foreach (string description in steps.AllKeys) { step++; if (!description.Equals("Optimising Reports")) { try { if (this.cancel) { System.Windows.Forms.Application.Exit(); } // Skip the OptimizedScripts this.lblStatus.Text = description + "..."; sql = SqlTool.ReadScript(steps[description]); /* * -- Parameters: * -- This values will be set in the deployment process * -- {0} Databasename * -- {1} WEB SQL Login * -- {2} Salt Administrator username * -- {3} Salt Administrator password */ //-- We don't want language translation {0} type place holders to be replaced. if (description == "Optimising Reports" || description == "Creating SQL server Job" || description == "Load Data") { sql = String.Format(sql, ApplicationState.DatabaseName.Replace("'", "''"), webUserName.Replace("'", "''"), ApplicationState.AdminUsername.Replace("'", "''"), ApplicationState.AdminPassword.Replace("'", "''") ); } else if (description == "Set DB Server Time Zone") { sql = sql.Replace("@@@VVV@@@", ApplicationState.DBServerTZ); } sql = sql.Replace("{databaseUser}", webUserName.Replace("'", "''")); sql = sql.Replace("{database}", ApplicationState.DatabaseName.Replace("'", "''")); if (this.cancel) { System.Windows.Forms.Application.Exit(); } SqlTool.Execute(connectionString, sql); this.prgStatus.Value = Convert.ToInt16((step * 1.0 / stepsCount) * 90.00); } catch (Exception ex) { this.lblError.Text += ex.Message + "\n"; MessageBox.Show("Error:" + ex.Message + Environment.NewLine + ex.StackTrace); } } } //Update Version this.lblStatus.Text = "Set Application Version" + "..."; sql = ConfigurationSettings.AppSettings["SetVersionScript"]; newVersion = ConfigurationSettings.AppSettings["NewVersionID"]; sql = String.Format(sql, newVersion.Replace("'", "''")); SqlTool.Execute(connectionString, sql); } //2. Grant Web SQL Login access permission if (ApplicationState.WebGrantPermission) { this.lblStatus.Text = "Grant Web SQL Login access permission" + "..."; sql = ConfigurationSettings.AppSettings["GrantPermissionScript"]; sql = String.Format(sql, webUserName.Replace("'", "''")); SqlTool.Execute(connectionString, sql); this.prgStatus.Value = 90; } //3. Set database connection this.lblStatus.Text = "Set database connection" + "..."; string strWebConnectionString = SqlTool.GetConnectionString( ApplicationState.ServerName, ApplicationState.DatabaseName, ApplicationState.WebUserType, ApplicationState.WebUsername, ApplicationState.WebPassword); this.UpdateWebConfig(strWebConnectionString, ApplicationState.WebPassword); //this.UpdateCPDWebConfig(strWebConnectionString, ApplicationState.WebPassword); this.prgStatus.Value = 100; Thread.Sleep(1000); this.Hide(); if (containsSQLJob.ToLower() == "yes") { MessageBox.Show("Please notify the database administrator that SQL Server Agent must be running in order to do background processing"); } //Thread.CurrentThread.Abort(); FrmComplete.Form.ShowDialog(); } catch (Exception ex) { MessageBox.Show("Error:" + ex.Message + Environment.NewLine + ex.StackTrace); System.Windows.Forms.Application.Exit(); } }