/// <summary> /// Converts DevInfo Database into DevInfo6.0.0.5 format /// </summary> /// <param name="forOnlineDB"></param> /// <returns></returns> public override bool DoConversion(bool forOnlineDB) { bool RetVal = false; int TotalSteps = 9; DBVersionBuilder VersionBuilder; DIDatabase DBDatabase; System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); // Do the conversion only if database has different Schema try { if (!this.IsValidDB(forOnlineDB)) { DITables.ICIUSTableName = "Indicator_Classifications_IUS"; this._DBQueries = new DIQueries(this._DBQueries.DataPrefix, this._DBQueries.LanguageCode); if (!base.IsValidDB(forOnlineDB)) { RetVal = base.DoConversion(forOnlineDB); } DITables.ICIUSTableName = "IC_IUS"; this._DBQueries = new DIQueries(this._DBQueries.DataPrefix, this._DBQueries.LanguageCode); if (this._ConvertDatabase) { this.RaiseProcessStartedEvent(TotalSteps); this.RaiseProcessInfoEvent(0); // Step 1: insert version info into database VersionBuilder = new DBVersionBuilder(this._DBConnection, this._DBQueries); VersionBuilder.InsertVersionInfo(Constants.Versions.DI7_0_0_0, Constants.VersionsChangedDates.DI7_0_0_0, Constants.VersionComments.DI7_0_0_0); this.RaiseProcessInfoEvent(1); // Step 2: Add new columns into IC, Indicator, IUS & area table and create document table this.UpdateDBSchema(forOnlineDB); } RetVal = true; } else { RetVal = true; } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } finally { System.Threading.Thread.CurrentThread.CurrentCulture = oldCI; } return RetVal; }
/// <summary> /// Converts DevInfo Database into DevInfo6.0.0.3 format /// </summary> /// <param name="forOnlineDB"></param> /// <returns></returns> public override bool DoConversion(bool forOnlineDB) { bool RetVal = false; int TotalSteps = 4; DBVersionBuilder VersionBuilder; //do the conversion only if database has different shcema try { if (!this.IsValidDB(forOnlineDB)) { if (!base.IsValidDB(forOnlineDB)) { RetVal = base.DoConversion(forOnlineDB); } // Step1: insert version info into database VersionBuilder = new DBVersionBuilder(this._DBConnection, this._DBQueries); VersionBuilder.InsertVersionInfo(Constants.Versions.DI6_0_0_3, Constants.VersionsChangedDates.DI6_0_0_3, Constants.VersionComments.DI6_0_0_3); this.RaiseProcessStartedEvent(TotalSteps); // Step2: create Recommended sources table and insert IC_IUS_Label into RecommendedSources table from IC_IUS table this.CreateNUpdateRecommendedSourcesTable(forOnlineDB); this.RaiseProcessInfoEvent(1); // Step3: add ICIUSOrder column in UT_Data table this.AddICIUSOrderColumn(forOnlineDB); this.RaiseProcessInfoEvent(2); // Step4: update ICIUSOrder into UT_Data table from IC_IUS table this.UpdateICIUSOrderInDataTable(); this.RaiseProcessInfoEvent(3); RetVal = true; } else { RetVal = true; } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); RetVal = false; } return RetVal; }
/// <summary> /// Converts DevInfo Database into DevInfo6.0.0.4 format /// </summary> /// <param name="forOnlineDB"></param> /// <returns></returns> public override bool DoConversion(bool forOnlineDB) { bool RetVal = false; int TotalSteps = 4; DBVersionBuilder VersionBuilder; //do the conversion only if database has different shcema try { if (!this.IsValidDB(forOnlineDB)) { if (!base.IsValidDB(forOnlineDB)) { RetVal = base.DoConversion(forOnlineDB); } // Step1: insert version info into database VersionBuilder = new DBVersionBuilder(this._DBConnection, this._DBQueries); VersionBuilder.InsertVersionInfo(Constants.Versions.DI6_0_0_4, Constants.VersionsChangedDates.DI6_0_0_4, Constants.VersionComments.DI6_0_0_4); this.RaiseProcessStartedEvent(TotalSteps); // Step2: remove empty records from recommended sources this.RemoveEmptyRecordsFrmRecommendedSources(forOnlineDB); this.RaiseProcessInfoEvent(1); // Step3: change datatype of Data_NID column to Long Integer under RecommendedSources table table this.UpdateDataNIdTypeForRecommendedSourcesTable(forOnlineDB); this.RaiseProcessInfoEvent(2); // Step4: remove duplicate records from dbVersion table this.DeleteDuplicateRecordsFrmDBVersion(); this.RaiseProcessInfoEvent(3); RetVal = true; } else { RetVal = true; } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); RetVal = false; } return RetVal; }
public override bool DoConversion(bool forOnlineDB) { bool RetVal = false; int TotalSteps = 6; DBVersionBuilder VersionBuilder; // Do the conversion only if database has different Schema try { if (!this.IsValidDB(forOnlineDB)) { this._DBQueries = new DIQueries(this._DBQueries.DataPrefix, this._DBQueries.LanguageCode); if (!base.IsValidDB(forOnlineDB)) { RetVal = base.DoConversion(forOnlineDB); } if (this._ConvertDatabase) { this.RaiseProcessStartedEvent(TotalSteps); this.RaiseProcessInfoEvent(0); if (this.UpdateDBSchema(forOnlineDB)) { this.RaiseProcessInfoEvent(4); // Insert version info into database after conversion VersionBuilder = new DBVersionBuilder(this._DBConnection, this._DBQueries); VersionBuilder.InsertVersionInfo(Constants.Versions.DI7_0_0_1, Constants.VersionsChangedDates.DI7_0_0_1, Constants.VersionComments.DI7_0_0_1); this.RaiseProcessInfoEvent(5); RetVal = true; } } } else { RetVal = true; } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } return RetVal; }
/// <summary> /// Converts DevInfo Database into DevInfo6.0.0.2 format /// </summary> /// <param name="forOnlineDB"></param> /// <returns></returns> public override bool DoConversion(bool forOnlineDB) { bool RetVal = false; int TotalSteps = 2; DBVersionBuilder VersionBuilder; //do the conversion only if database has different shcema try { if (!this.IsValidDB(forOnlineDB)) { if (!base.IsValidDB(forOnlineDB)) { RetVal = base.DoConversion(forOnlineDB); } // Step1: insert version info into database VersionBuilder = new DBVersionBuilder(this._DBConnection, this._DBQueries); VersionBuilder.InsertVersionInfo(Constants.Versions.DI6_0_0_2, Constants.VersionsChangedDates.DI6_0_0_2, Constants.VersionComments.DI6_0_0_2); this.RaiseProcessStartedEvent(TotalSteps); // Step2: create DB_MetaData table this.CreateDBMetaTable(forOnlineDB); this.RaiseProcessInfoEvent(1); RetVal = true; } else { RetVal = true; } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); RetVal = false; } return RetVal; }
/// <summary> /// Register database in db.xml file /// </summary> /// <param name="requestParam"></param> /// <returns></returns> public string AdminRegisterDatabase(string requestParam) { string RetVal = string.Empty; string[] Params; string DBConnectionsFile = string.Empty; XmlDocument XmlDoc; XmlNode xmlNode; string CategoryName = string.Empty; string ConnName = string.Empty; string DbConn = string.Empty; string DefArea = string.Empty; string Description = string.Empty; string IsDefDb = string.Empty; string IsRegCatalog = string.Empty; XmlElement NewNode; int NewId = 0; string[] DBConnArr; DIConnection ObjDIConnection = null; string ServerType = string.Empty; string ServerName = string.Empty; string DbName = string.Empty; string UserName = string.Empty; string Password = string.Empty; string QryStr = string.Empty; DataTable DTCounts; string CountStr = string.Empty; XmlElement NewCategoryNode; XmlNodeList ObjXmlNodeList; int CategoryId = 0; string DbConnWithEncryptPassword = string.Empty; string DefAreaJSon = string.Empty; string DefAreaCount = "0"; string[] DefAreaStr; string[] DefIndStr; string DefInd = string.Empty; string DefIndJSon = string.Empty; string strDefaultLanguage = string.Empty; DBConverterDecorator objDBConverterDecorator = null; DBVersionBuilder VersionBuilder = null; string DbDefaultLanguage = string.Empty; string[] DbAvailableLanguage = null; string DbAvailableLanguageStr = string.Empty; string isGlobalAllow = ConfigurationManager.AppSettings[Constants.WebConfigKey.IsGlobalAllow]; try { requestParam = HttpUtility.UrlDecode(requestParam); Params = Global.SplitString(requestParam, Constants.Delimiters.ParamDelimiter); CategoryName = Params[0]; ConnName = Params[1]; DbConn = Params[2]; if (Params.Length > 3) { DefArea = Params[3]; } if (Params.Length > 4) { Description = Params[4]; } if (Params.Length > 6) { IsRegCatalog = Params[6]; } DBConnectionsFile = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, ConfigurationManager.AppSettings[Constants.WebConfigKey.DBConnectionsFile]); XmlDoc = new XmlDocument(); XmlDoc.Load(DBConnectionsFile); xmlNode = XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root + "/" + Constants.XmlFile.Db.Tags.Category + "/" + Constants.XmlFile.Db.Tags.Database + "[@" + Constants.XmlFile.Db.Tags.DatabaseAttributes.Name + "='" + ConnName + "']"); if (xmlNode != null) { RetVal = "exists"; } else { xmlNode = XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root + "/" + Constants.XmlFile.Db.Tags.Category + "[@" + Constants.XmlFile.Db.Tags.CategoryAttributes.Name + "='" + CategoryName + "']"); if (xmlNode == null) { NewCategoryNode = XmlDoc.CreateElement(Constants.XmlFile.Db.Tags.Category); NewCategoryNode.SetAttribute(Constants.XmlFile.Db.Tags.CategoryAttributes.Name, CategoryName); xmlNode = XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root).AppendChild(NewCategoryNode); } // Get old higher id ObjXmlNodeList = XmlDoc.SelectNodes("/" + Constants.XmlFile.Db.Tags.Root + "/" + Constants.XmlFile.Db.Tags.Category + "/" + "child::node()"); foreach (XmlNode data in ObjXmlNodeList) { CategoryId = int.Parse(data.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.Id].Value); if (NewId < CategoryId) { NewId = CategoryId; } } NewId++; // Increase 1 for new id // Split connection details in variables DBConnArr = Global.SplitString(DbConn, "||"); ServerType = DBConnArr[0]; ServerName = DBConnArr[1]; DbName = DBConnArr[2]; UserName = DBConnArr[3]; if (DBConnArr.Length > 4) { Password = DBConnArr[4]; } ObjDIConnection = new DIConnection(((DIServerType)Convert.ToInt32(ServerType)), ServerName, "", DbName, UserName, Password); // Get default language for that db QryStr = "SELECT Language_Code FROM ut_language WHERE Language_Default = 1"; DTCounts = ObjDIConnection.ExecuteDataTable(Regex.Replace(QryStr, "UT_", ObjDIConnection.DIDataSetDefault(), RegexOptions.IgnoreCase)); if (DTCounts.Rows.Count == 1) strDefaultLanguage = DTCounts.Rows[0]["Language_Code"].ToString(); else strDefaultLanguage = "en"; // Get counts from db QryStr = "select DBMtd_AreaCnt, DBMtd_IndCnt, DBMtd_SrcCnt, DBMtd_DataCnt from ut_dbmetadata_" + strDefaultLanguage; DTCounts = ObjDIConnection.ExecuteDataTable(Regex.Replace(QryStr, "UT_", ObjDIConnection.DIDataSetDefault(), RegexOptions.IgnoreCase)); DataRow Row = DTCounts.Rows[0]; CountStr = string.Format("{0:0,0}", Row[0]) + "_" + string.Format("{0:0,0}", Row[1]) + "_" + string.Format("{0:0,0}", Row[2]) + "_" + string.Format("{0:0,0}", Row[3]); DbConnWithEncryptPassword = ServerType + "||" + ServerName + "||" + DbName + "||" + UserName; if (!string.IsNullOrEmpty(Password)) { DbConnWithEncryptPassword += "||" + Global.EncryptString(Password); } else { DbConnWithEncryptPassword += "||"; } //get default language code in database DbDefaultLanguage = ObjDIConnection.DILanguageCodeDefault(ObjDIConnection.DIDataSetDefault()); //get all avalilable language code in database DbAvailableLanguage = Global.GetAllAvailableLanguageCode(ObjDIConnection); if (DbAvailableLanguage.Length > 0) { DbAvailableLanguageStr = string.Join(",", DbAvailableLanguage); } if (Global.standalone_registry != "true") { this.RunDBScripts(ObjDIConnection, NewId.ToString(), DbDefaultLanguage.Substring(1)); VersionBuilder = new DBVersionBuilder(ObjDIConnection, new DIQueries(ObjDIConnection.DIDataSetDefault(), ObjDIConnection.DILanguageCodeDefault(ObjDIConnection.DIDataSetDefault()))); VersionBuilder.InsertVersionInfo(Constants.DBVersion.DI7_0_0_0, Constants.DBVersion.VersionsChangedDatesDI7_0_0_0, Constants.DBVersion.VersionCommentsDI7_0_0_0); #region -- Get default values of indicator, area and language -- #region -- get default indicator and their Json data -- DefIndStr = GetDefaultIndicators(ObjDIConnection, strDefaultLanguage); DefInd = DefIndStr[0]; DefIndJSon = DefIndStr[1]; #endregion #region --get default area of level 1 and 2 (L1 + L2) by stored procedure with their json and counts -- DefAreaStr = GetDefaultAreas(ObjDIConnection, strDefaultLanguage); DefArea = DefAreaStr[0]; DefAreaJSon = DefAreaStr[1]; DefAreaCount = DefAreaStr[2]; #endregion #endregion #region "Catalog" if (IsRegCatalog == "true") { // Set description filed to update in service database this.DataBaseDescription = Description.Replace("'", "''").Replace("\n", "<br />").Replace(@"""", @"\"""); if (InsertIntoCatalog(ObjDIConnection, Row, DbAvailableLanguageStr)) { GetAndUpdateIndexedAreas(DbAvailableLanguage, ObjDIConnection); GetAndUpdateIndexedIndicators(DbAvailableLanguage, ObjDIConnection); } } #endregion "Catalog" } #region -- Set xml tag attribute values and save it in db.xml file -- //Create new element node and set its attributes NewNode = XmlDoc.CreateElement(Constants.XmlFile.Db.Tags.Database); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.Id, NewId.ToString()); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.Name, ConnName); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.SDMXDb, "false"); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.Count, CountStr); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultLanguage, DbDefaultLanguage.Substring(1)); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultIndicator, DefInd); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultIndicatorJSON, DefIndJSon); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultArea, DefArea); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultAreaJSON, DefAreaJSon); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultAreaCount, DefAreaCount); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.DatabaseConnection, DbConnWithEncryptPassword); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.AvailableLanguage, DbAvailableLanguageStr); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.LastModified, string.Format("{0:yyyy-MM-dd}", DateTime.Today.Date)); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.LanguageCodeCSVFiles, string.Empty); NewNode.SetAttribute(Constants.XmlFile.Db.Tags.DatabaseAttributes.IsSDMXHeaderCreated, "false"); if (DbAvailableLanguage != null) { foreach (string LanguageCode in DbAvailableLanguage) { NewNode.SetAttribute("desc_" + LanguageCode, Description); } } xmlNode.AppendChild(NewNode); XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root).Attributes[Constants.XmlFile.Db.Tags.RootAttributes.Default].Value = NewId.ToString(); //Save xml file File.SetAttributes(DBConnectionsFile, FileAttributes.Normal); XmlDoc.Save(DBConnectionsFile); #endregion GenerateAllPagesXML(); DeleteSitemapFiles(); RetVal = NewId.ToString(); } } catch (Exception ex) { Global.WriteErrorsInLogFolder("error in Registering new database"); Global.CreateExceptionString(ex, null); } finally { if (ObjDIConnection != null) { ObjDIConnection.Dispose(); ObjDIConnection = null; } } return RetVal; }
/// Update connection details by selected db /// </summary> /// <param name="requestParam"></param> /// <returns></returns> public string AdminUpdateDbConnection(string requestParam) { string RetVal = string.Empty; string[] Params; string DBConnectionsFile = string.Empty; XmlDocument XmlDoc; XmlNode xmlNode; string DbNId = string.Empty; string ConnName = string.Empty; string DbConn = string.Empty; string Password = string.Empty; string DefArea = string.Empty; string Description = string.Empty; string IsDefDb = string.Empty; string CategoryName = string.Empty; XmlElement NewCategoryElement; XmlNode NewXmlNode; XmlNode CategoryNode; DIConnection ObjDIConnection = null; string[] DbAvailableLanguage; string strDefaultLanguage = string.Empty; string CountStr = string.Empty; DataTable DTCounts; string QryStr = string.Empty; string DbDefaultLanguage = string.Empty; string DbAvailableLanguageStr = string.Empty; string DefAreaJSon = string.Empty; string DefAreaCount = "0"; string[] DefAreaStr; string[] DefIndStr; string DefInd = string.Empty; string DefIndJSon = string.Empty; DBConverterDecorator objDBConverterDecorator = null; DBVersionBuilder VersionBuilder = null; ///Variables for creatin XLSLogfile string[] DatabaseParams; string XLSFileMsg = string.Empty; string Server_HostName = string.Empty; string DatabaseName = string.Empty; string DataBaseUserName = string.Empty; string[] DBConnArr; try { requestParam = HttpUtility.UrlDecode(requestParam); Params = Global.SplitString(requestParam, Constants.Delimiters.ParamDelimiter); DbNId = Params[0]; ConnName = Params[1]; DbConn = Params[2]; Password = Params[3]; Description = Params[4]; IsDefDb = Params[5]; CategoryName = Params[6]; DBConnectionsFile = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, ConfigurationManager.AppSettings[Constants.WebConfigKey.DBConnectionsFile]); XmlDoc = new XmlDocument(); XmlDoc.Load(DBConnectionsFile); DBConnArr = DbConn.Split(new string[] { "||" }, StringSplitOptions.None); ObjDIConnection = new DIConnection(((DIServerType)Convert.ToInt32(DBConnArr[0])), DBConnArr[1].ToString(), string.Empty, DBConnArr[2].ToString(), DBConnArr[3].ToString(), Password); if (!string.IsNullOrEmpty(Password)) { Password = Global.EncryptString(Password); DbConn = DbConn + Password; } QryStr = "SELECT Language_Code FROM ut_language WHERE Language_Default = 1"; DTCounts = ObjDIConnection.ExecuteDataTable(Regex.Replace(QryStr, "UT_", ObjDIConnection.DIDataSetDefault(), RegexOptions.IgnoreCase)); if (DTCounts.Rows.Count == 1) strDefaultLanguage = DTCounts.Rows[0]["Language_Code"].ToString(); else strDefaultLanguage = "en"; // Get counts from db QryStr = "select DBMtd_AreaCnt, DBMtd_IndCnt, DBMtd_SrcCnt, DBMtd_DataCnt from ut_dbmetadata_" + strDefaultLanguage; DTCounts = ObjDIConnection.ExecuteDataTable(Regex.Replace(QryStr, "UT_", ObjDIConnection.DIDataSetDefault(), RegexOptions.IgnoreCase)); DataRow Row = DTCounts.Rows[0]; CountStr = string.Format("{0:0,0}", Row[0]) + "_" + string.Format("{0:0,0}", Row[1]) + "_" + string.Format("{0:0,0}", Row[2]) + "_" + string.Format("{0:0,0}", Row[3]); //get default language code in database DbDefaultLanguage = ObjDIConnection.DILanguageCodeDefault(ObjDIConnection.DIDataSetDefault()); //get all avalilable language code in database DbAvailableLanguage = Global.GetAllAvailableLanguageCode(ObjDIConnection); if (DbAvailableLanguage.Length > 0) { DbAvailableLanguageStr = string.Join(",", DbAvailableLanguage); } #region -- get default indicator and their Json data -- DefIndStr = GetDefaultIndicators(ObjDIConnection, strDefaultLanguage); DefInd = DefIndStr[0]; DefIndJSon = DefIndStr[1]; #endregion #region --get default area of level 1 and 2 (L1 + L2) by stored procedure with their json and counts -- DefAreaStr = GetDefaultAreas(ObjDIConnection, strDefaultLanguage); DefArea = DefAreaStr[0]; DefAreaJSon = DefAreaStr[1]; DefAreaCount = DefAreaStr[2]; #endregion //Check connection name already exists or not if (XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root + "/" + Constants.XmlFile.Db.Tags.Category + "/" + Constants.XmlFile.Db.Tags.Database + "[@" + Constants.XmlFile.Db.Tags.DatabaseAttributes.Name + "='" + ConnName + "']") != null && XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root + "/" + Constants.XmlFile.Db.Tags.Category + "/" + Constants.XmlFile.Db.Tags.Database + "[@" + Constants.XmlFile.Db.Tags.DatabaseAttributes.Name + "='" + ConnName + "']").Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.Id].Value != DbNId.ToString()) { RetVal = "exists"; } else { xmlNode = XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root + "/" + Constants.XmlFile.Db.Tags.Category + "/" + Constants.XmlFile.Db.Tags.Database + "[@" + Constants.XmlFile.Db.Tags.DatabaseAttributes.Id + "=" + DbNId + "]"); if (xmlNode.Attributes["langcode_csvfiles"] == null) { XmlAttribute attrCSV = XmlDoc.CreateAttribute("langcode_csvfiles"); attrCSV.Value = string.Empty; xmlNode.Attributes.Append(attrCSV); } else { xmlNode.Attributes["langcode_csvfiles"].Value = string.Empty; } if (xmlNode.ParentNode.Attributes[Constants.XmlFile.Db.Tags.CategoryAttributes.Name].Value == CategoryName) { //Update for same category name xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.Name].Value = ConnName; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DatabaseConnection].Value = DbConn; if (xmlNode.Attributes["desc" + DbDefaultLanguage] == null) { XmlAttribute attrDesc = XmlDoc.CreateAttribute("desc" + DbDefaultLanguage); attrDesc.Value = Description; xmlNode.Attributes.Append(attrDesc); } else { xmlNode.Attributes["desc" + DbDefaultLanguage].Value = Description; } xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.Count].Value = CountStr; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.LastModified].Value = string.Format("{0:yyyy-MM-dd}", DateTime.Today.Date); xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.AvailableLanguage].Value = DbAvailableLanguageStr; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultLanguage].Value = DbDefaultLanguage.Substring(1); xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultIndicator].Value = DefInd; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultIndicatorJSON].Value = DefIndJSon; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultArea].Value = DefArea; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultAreaJSON].Value = DefAreaJSon; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultAreaCount].Value = DefAreaCount; //Update default dbNId if (IsDefDb == "true") { XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root).Attributes[Constants.XmlFile.Db.Tags.RootAttributes.Default].Value = DbNId; } File.SetAttributes(DBConnectionsFile, FileAttributes.Normal); XmlDoc.Save(DBConnectionsFile); //Update Metadata Description in the database ObjDIConnection.ExecuteNonQuery("UPDATE " + ObjDIConnection.DIDataSetDefault() + "dbmetadata" + ObjDIConnection.DILanguageCodeDefault(ObjDIConnection.DIDataSetDefault()).ToString() + " SET DBMtd_Desc = '" + Description.Replace("'", "''") + "'"); RetVal = "true"; } else if (xmlNode.ParentNode.Attributes[Constants.XmlFile.Db.Tags.CategoryAttributes.Name].Value != CategoryName) { //Update when category name has changed for same id //Update values in node xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.Name].Value = ConnName; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DatabaseConnection].Value = DbConn; xmlNode.Attributes["desc_en"].Value = Description; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.Count].Value = CountStr; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.LastModified].Value = string.Format("{0:yyyy-MM-dd}", DateTime.Today.Date); xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.AvailableLanguage].Value = DbAvailableLanguageStr; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultLanguage].Value = DbDefaultLanguage.Substring(1); xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultIndicator].Value = DefInd; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultIndicatorJSON].Value = DefIndJSon; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultArea].Value = DefArea; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultAreaJSON].Value = DefAreaJSon; xmlNode.Attributes[Constants.XmlFile.Db.Tags.DatabaseAttributes.DefaultAreaCount].Value = DefAreaCount; //Update default dbNId if (IsDefDb == "true") { XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root).Attributes[Constants.XmlFile.Db.Tags.RootAttributes.Default].Value = DbNId; } //Copy updated node values in new node NewXmlNode = xmlNode; //Remove current node xmlNode.ParentNode.RemoveChild(xmlNode); //Read the category node CategoryNode = XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root + "/" + Constants.XmlFile.Db.Tags.Category + "[@" + Constants.XmlFile.Db.Tags.CategoryAttributes.Name + "='" + CategoryName + "']"); //Create a category node if not exists if (CategoryNode == null) { NewCategoryElement = XmlDoc.CreateElement(Constants.XmlFile.Db.Tags.Category); NewCategoryElement.SetAttribute(Constants.XmlFile.Db.Tags.CategoryAttributes.Name, CategoryName); CategoryNode = XmlDoc.SelectSingleNode("/" + Constants.XmlFile.Db.Tags.Root).AppendChild(NewCategoryElement); } //Append the new node in category CategoryNode.AppendChild(NewXmlNode); File.SetAttributes(DBConnectionsFile, FileAttributes.Normal); XmlDoc.Save(DBConnectionsFile); RetVal = "true"; //Update Metadata Description in the database ObjDIConnection.ExecuteNonQuery("UPDATE " + ObjDIConnection.DIDataSetDefault() + "dbmetadata" + ObjDIConnection.DILanguageCodeDefault(ObjDIConnection.DIDataSetDefault()).ToString() + " SET DBMtd_Desc = '" + Description.Replace("'", "''") + "'"); } if (Global.standalone_registry != "true") { this.RunDBScripts(ObjDIConnection, DbNId, DbDefaultLanguage.Substring(1)); // Generate language file because RunDBScripts method deletes existing language file, so user will not be able to execute furter functionality. GenerateAllPagesXML(); VersionBuilder = new DBVersionBuilder(ObjDIConnection, new DIQueries(ObjDIConnection.DIDataSetDefault(), ObjDIConnection.DILanguageCodeDefault(ObjDIConnection.DIDataSetDefault()))); VersionBuilder.InsertVersionInfo(Constants.DBVersion.DI7_0_0_0, Constants.DBVersion.VersionsChangedDatesDI7_0_0_0, Constants.DBVersion.VersionCommentsDI7_0_0_0); } // Set description filed to update in service database this.DataBaseDescription = Description.Replace("'", "''").Replace("\n", "<br />").Replace(@"""", @"\"""); GetAndUpdateIndexedAreas(DbAvailableLanguage, ObjDIConnection); GetAndUpdateIndexedIndicators(DbAvailableLanguage, ObjDIConnection); UpdateAdaptations(ObjDIConnection); DeleteSitemapFiles(); } #region "Call method to write log in XLS file" if (RetVal == "true") { DatabaseParams = DbConn.Split(new string[] { "||" }, StringSplitOptions.None); if (!string.IsNullOrEmpty(DatabaseParams[1].ToString())) { Server_HostName = DatabaseParams[1].ToString(); } if (!string.IsNullOrEmpty(DatabaseParams[2].ToString())) { DatabaseName = DatabaseParams[2].ToString(); } if (!string.IsNullOrEmpty(DatabaseParams[3].ToString())) { DataBaseUserName = DatabaseParams[3].ToString(); } //"Connection Name:{0}, Server/Host Name:{1}, Database Name:{2}, User Name:{3}, Description:{4}"; XLSFileMsg = string.Format(Constants.CSVLogMessage.UpdateConnection, ConnName, Server_HostName, DatabaseName, DataBaseUserName, Description); WriteLogInXLSFile(Constants.AdminModules.DatabaseSettings.ToString(), XLSFileMsg); } #endregion } catch (Exception ex) { Global.CreateExceptionString(ex, null); } return RetVal; }
/// <summary> /// Converts DevInfo Database into DevInfo6.0.0.5 format /// </summary> /// <param name="forOnlineDB"></param> /// <returns></returns> public override bool DoConversion(bool forOnlineDB) { bool RetVal = false; int TotalSteps = 7; DBVersionBuilder VersionBuilder; DIDatabase DBDatabase; // Do the conversion only if database has different Schema try { if (!this.IsValidDB(forOnlineDB)) { if (!base.IsValidDB(forOnlineDB)) { RetVal = base.DoConversion(forOnlineDB); } // Step 1: insert version info into database VersionBuilder = new DBVersionBuilder(this._DBConnection, this._DBQueries); VersionBuilder.InsertVersionInfo(Constants.Versions.DI6_0_0_5, Constants.VersionsChangedDates.DI6_0_0_5, Constants.VersionComments.DI6_0_0_5); this.RaiseProcessStartedEvent(TotalSteps); // Step 2: Add new columns into IC, Indicator, IUS & area table and create document table this.UpdateDBSchema(forOnlineDB); // Step 3: Create Metadata_Category Table this.CreateMetadatCategoryTable(forOnlineDB); this.RaiseProcessInfoEvent(1); // Step 4: Add Order Column into Subgroup, SubgrouVal,IC this.AddOrderColumn(forOnlineDB, this._DBConnection.ConnectionStringParameters.ServerType); this.RaiseProcessInfoEvent(2); // Step 5: Convert Metadata Values of Indicator,Area,Source this.ConvertMetadataXmlIntoDatabse(); this.RaiseProcessInfoEvent(3); // Step 6: Update Metadata Values of Indicator,Area,Source and Set Category values from Mask Files this.ConvertMetataCategoryIntoDatabase(); this.RaiseProcessInfoEvent(4); // Step 7: Update Order value SubgroupVal this.UpdateSortOrderIntoSubgroupVal(); this.RaiseProcessInfoEvent(5); // Step 8: Update Sortt Column for Subgroup Dimension Values this.UpdateSortOrderIntoSubgroup(); this.RaiseProcessInfoEvent(6); // Step 9: Update Order value for Indicator Classification(for Sector,Goal,Source... etc. and IC_IUS_Order IN IC_IUS table this.UpdateSortOrderIntoIC(-1, ICType.Sector); this.UpdateSortOrderIntoIC(-1, ICType.Source); this.UpdateSortOrderIntoIC(-1, ICType.Theme); this.UpdateSortOrderIntoIC(-1, ICType.Goal); this.UpdateSortOrderIntoIC(-1, ICType.Institution); this.UpdateSortOrderIntoIC(-1, ICType.Convention); this.UpdateSortOrderIntoIC(-1, ICType.CF); this.RaiseProcessInfoEvent(7); RetVal = true; // Step 10: update auto calcualted fields DBDatabase = new DIDatabase(this._DBConnection, this._DBQueries); DBDatabase.UpdateAutoCalculatedFieldsInTables(); } else { RetVal = true; } } catch (Exception ex) { throw new ApplicationException(ex.ToString()); } return RetVal; }