/// <summary> /// loads the localized commodity names and check if /// the self added names now included in the official dictionary /// </summary> internal void ImportCommodityLocalizations(DataSet DataNames, enLocalisationImportType importType = enLocalisationImportType.onlyNew) { DBConnector lDBCon = null; dsEliteDB Data; Dictionary<String, Int32> foundLanguagesFromFile = new Dictionary<String, Int32>(); String sqlString; Int32 currentSelfCreatedIndex; Int32 Counter = 0; Boolean idColumnFound = false; String BaseName; DataRow[] Commodity; Data = new dsEliteDB(); try { lDBCon = new DBConnector(Program.DBCon.ConfigData, true); // gettin' some freaky performance lDBCon.Execute("set global innodb_flush_log_at_trx_commit=2"); sqlString = "select min(id) As min_id from tbCommodity"; lDBCon.Execute(sqlString, "minID", DataNames); if(Convert.IsDBNull(DataNames.Tables["minID"].Rows[0]["min_id"])) currentSelfCreatedIndex = -1; else { currentSelfCreatedIndex = ((Int32)DataNames.Tables["minID"].Rows[0]["min_id"]) - 1; if(currentSelfCreatedIndex >= 0) currentSelfCreatedIndex = -1; } lDBCon.TableRead("select * from tbLanguage", Data.tblanguage); lDBCon.TableRead("select * from tbCommodityLocalization", Data.tbcommoditylocalization); lDBCon.TableRead("select * from tbCommodity", Data.tbcommodity); if(DataNames.Tables["Names"] != null) { sendProgressEvent(new ProgressEventArgs() {Info="import commodity localization", CurrentValue=Counter, TotalValue=DataNames.Tables["Names"].Rows.Count }); // first check if there's a new language foreach (DataColumn LanguageFromFile in DataNames.Tables["Names"].Columns) { if(!LanguageFromFile.ColumnName.Equals("id", StringComparison.InvariantCultureIgnoreCase)) { DataRow[] LanguageName = Data.tblanguage.Select("language = " + DBConnector.SQLAString(LanguageFromFile.ColumnName)); if(LanguageName.Count() == 0) { // add a non existing language DataRow newRow = Data.tblanguage.NewRow(); int? Wert = DBConvert.To<int?>(Data.tblanguage.Compute("max(id)", "")); if(Wert == null) Wert = 0; Wert += 1; newRow["id"] = Wert; newRow["language"] = LanguageFromFile.ColumnName; Data.tblanguage.Rows.Add(newRow); foundLanguagesFromFile.Add(LanguageFromFile.ColumnName, (Int32)Wert); } else foundLanguagesFromFile.Add((String)LanguageName[0]["language"], (Int32)LanguageName[0]["id"]); } else idColumnFound = true; } // submit changes (tbLanguage) lDBCon.TableUpdate(Data.tblanguage); // compare and add the localized names foreach (DataRow LocalizationFromFile in DataNames.Tables["Names"].AsEnumerable()) { int? commodityID = null; if (idColumnFound) commodityID = DBConvert.To<int?>(LocalizationFromFile["id"]); if (commodityID == 1) Debug.Print("Stop"); BaseName = (String)LocalizationFromFile[Program.BASE_LANGUAGE]; if ((commodityID == null) || (commodityID < 0)) { // no id or selfcreated Commodity = Data.tbcommodity.Select("commodity = " + DBConnector.SQLAString(DBConnector.DTEscape(BaseName))); } else { // confirmed commodity with id Commodity = Data.tbcommodity.Select("id = " + commodityID); } if (Commodity.Count() == 0) { // completely unknown commodity - add first new entry to "tbCommodities" DataRow newRow = Data.tbcommodity.NewRow(); newRow["id"] = currentSelfCreatedIndex; newRow["commodity"] = BaseName; newRow["is_rare"] = 0; Data.tbcommodity.Rows.Add(newRow); currentSelfCreatedIndex -= 1; // submit changes (tbCommodity) lDBCon.TableUpdate(Data.tbcommodity); Commodity = Data.tbcommodity.Select("commodity = " + DBConnector.SQLAString(DBConnector.DTEscape(BaseName))); } foreach (KeyValuePair<String, Int32> LanguageFormFile in foundLanguagesFromFile) { DataRow[] currentLocalizations = Data.tbcommoditylocalization.Select(" commodity_id = " + Commodity[0]["id"] + " and language_id = " + LanguageFormFile.Value); if(currentLocalizations.Count() == 0) { // add a new localization DataRow newRow = Data.tbcommoditylocalization.NewRow(); newRow["commodity_id"] = Commodity[0]["id"]; newRow["language_id"] = LanguageFormFile.Value; if((String)LocalizationFromFile[LanguageFormFile.Key] == "") newRow["locname"] = BaseName; else newRow["locname"] = (String)LocalizationFromFile[LanguageFormFile.Key]; Data.tbcommoditylocalization.Rows.Add(newRow); } else if((importType == enLocalisationImportType.overWriteAll) || ((importType == enLocalisationImportType.overwriteNonBase) && (LanguageFormFile.Key != Program.BASE_LANGUAGE))) { if((String)LocalizationFromFile[LanguageFormFile.Key] != "") currentLocalizations[0]["locname"] = (String)LocalizationFromFile[LanguageFormFile.Key]; } } Counter++; sendProgressEvent(new ProgressEventArgs() {Info="import commodity localization", CurrentValue=Counter, TotalValue=DataNames.Tables["Names"].Rows.Count }); //if((Counter % 50) == 0) // lDBCon.TableUpdate(Data.tbcommoditylocalization); } } // submit changes lDBCon.TableUpdate(Data.tbcommoditylocalization); // gettin' some freaky performance lDBCon.Execute("set global innodb_flush_log_at_trx_commit=1"); lDBCon.Dispose(); } catch (Exception ex) { if(lDBCon != null) { try { // reset freaky performance lDBCon.Execute("set global innodb_flush_log_at_trx_commit=1"); } catch (Exception) { } lDBCon.Dispose(); } throw new Exception("Error while loading commodity names", ex); } }
public void ImportLocalizationDataFromCSV(string fileName, EliteDBIO.enLocalizationType activeSetting, enLocalisationImportType importType = enLocalisationImportType.onlyNew) { String sqlString = ""; Int32 counter = 0; String infoString = ""; String idString = ""; String dataLine; DataSet importData; DataTable importTable; try { switch (activeSetting) { case enLocalizationType.Commodity: infoString = "import commodity localization..."; idString = "Commodity_ID;Language;Name"; break; case enLocalizationType.Category: infoString = "import category localization..."; idString = "Category_ID;Language;Name"; break; case enLocalizationType.Economylevel: infoString = "import economylevel localization..."; idString = "EconomyLevel_ID;Language;Name"; break; default: throw new Exception("unknown setting : " + activeSetting); } List<string> dataLines = File.ReadAllLines(fileName).ToList(); if(dataLines[0].Equals(idString, StringComparison.InvariantCultureIgnoreCase)) { importData = new DataSet(); importTable = new DataTable("Names"); importData.Tables.Add(importTable); DataColumn column; column = new DataColumn("id", Type.GetType("System.Int32")); column.AllowDBNull = false; column.Unique = true; importTable.Columns.Add(column); for (int i = 1; i < dataLines.Count; i++) { if(!String.IsNullOrEmpty(dataLines[i])) { switch (activeSetting) { case enLocalizationType.Commodity: List<String> data = dataLines[i].Split(new char[] {';'}).ToList(); Int32 currentID = Int32.Parse(data[0]); if (!importTable.Columns.Contains(data[1])) { Debug.Print(Type.GetType("System.String").ToString()); // add a new language in table column = new DataColumn(data[1], Type.GetType("System.String")); column.DefaultValue = ""; importTable.Columns.Add(column); } DataRow currentrow; var rowForID = importTable.Select("id = " + currentID); if (rowForID.Count() == 0) { // add a new row currentrow = importTable.NewRow(); currentrow["id"] = currentID; importTable.Rows.Add(currentrow); } else currentrow = rowForID[0]; currentrow[data[1]] = data[2].Trim(); break; case enLocalizationType.Category: break; case enLocalizationType.Economylevel: break; default: throw new Exception("unknown setting : " + activeSetting); } } counter++; } switch (activeSetting) { case enLocalizationType.Commodity: ImportCommodityLocalizations(importData, importType); break; case enLocalizationType.Category: infoString = "import category localization..."; idString = "Category_ID;Language;Name"; break; case enLocalizationType.Economylevel: infoString = "import economylevel localization..."; idString = "EconomyLevel_ID;Language;Name"; break; default: throw new Exception("unknown setting : " + activeSetting); } } else { sendProgressEvent(new ProgressEventArgs() { Info="abort: file has wrong header", CurrentValue=1, TotalValue=1, ForceRefresh=true }); } dataLines.Clear(); } catch (Exception ex) { throw new Exception("Error while importing localization data from csv", ex); } }