bool UpdateDataBases (TransportData Results) { foreach (String TableName in Results.ResultsOfCommandsToRun.Keys) { DataSet ResultDataSet = Results.ResultsOfCommandsToRun [TableName]; if (ResultDataSet.Tables [TableName] == null) continue; List<String> UniqueIDForThisTable = Results.GetUniqueIdsForTable (TableName); int NumberOfEntriesToProcess = ResultDataSet.Tables [TableName].Rows.Count; if (WMB.Basics.IsTestRun) WMB.Basics.ReportInformationToEventViewer("Aus der Tabelle \"" + TableName + "\" werden " + Convert.ToString(NumberOfEntriesToProcess) + " in die DatenBank \"" + DataBase.DefaultConnectionStringName + "\" übertragen"); foreach (DataRow InputRow in ResultDataSet.Tables[TableName].Rows) { List<String> WhereClauseEntries = new List<String> (); String ConcatenatedIDField = String.Empty; String ConcatenetedIDContent = String.Empty; foreach (String IDEntry in UniqueIDForThisTable) { if (String.IsNullOrEmpty (IDEntry)) continue; String [] IDENtries = IDEntry.Split (','); if (IDENtries [1] == "int") { WhereClauseEntries.Add (" (" + IDENtries [0] + " = " + Convert.ToString (InputRow [IDENtries [0]]) + ") "); } if (IDENtries [1] == "String") { WhereClauseEntries.Add (" (" + IDENtries [0] + " = '" + Convert.ToString (InputRow [IDENtries [0]]) + "') "); if (UniqueIDForThisTable.Count > 1) { ConcatenatedIDField = ConcatenatedIDField + IDENtries [0]; ConcatenetedIDContent = ConcatenetedIDContent + Convert.ToString (InputRow [IDENtries [0]]); } } if (IDENtries [1] == "DateTime") { WhereClauseEntries.Add (" (" + IDENtries [0] + " = '" + WMB.Basics.GetSelectFormattedDateTime (Convert.ToDateTime(InputRow [IDENtries [0]])) + "') "); } } String WhereClause = String.Empty; if (WhereClauseEntries.Count > 0) WhereClause = " where " + String.Join (" and ", WhereClauseEntries.ToArray ()) + " "; else { DataBase.RunSQLBatch ("Delete from " + TableName); } String SelectStatement = "Select * from " + TableName + WhereClause; DataSet OldDataDataSet = DataBase.GetCommonDataSet (SelectStatement); if (OldDataDataSet.Tables.Count != 1) throw new Exception (("DataBase Fehler bei \"" + SelectStatement + "\"")); DataRow RowToUpdate = null; if (OldDataDataSet.Tables [TableName].Rows.Count == 0) { RowToUpdate = OldDataDataSet.Tables [TableName].NewRow (); } else { RowToUpdate = OldDataDataSet.Tables [TableName].Rows [0]; } bool UpdateRequired = false; foreach (DataColumn Col in ResultDataSet.Tables [TableName].Columns) { if (String.Compare (RowToUpdate [Col.ColumnName].ToString (), InputRow [Col.ColumnName].ToString ()) == 0) continue; if (Col.DataType == typeof (Decimal)) { if ((InputRow [Col.ColumnName] != Convert.DBNull) && (RowToUpdate [Col.ColumnName] != Convert.DBNull)) if (Convert.ToDecimal (RowToUpdate [Col.ColumnName]) == Convert.ToDecimal (InputRow [Col.ColumnName])) continue; } RowToUpdate [Col.ColumnName] = InputRow [Col.ColumnName]; UpdateRequired = true; } if (UniqueIDForThisTable.Count > 1) { if (String.Compare (RowToUpdate [ConcatenatedIDField].ToString (), ConcatenetedIDContent) != 0) { RowToUpdate [ConcatenatedIDField] = ConcatenetedIDContent; UpdateRequired = true; } } if (OldDataDataSet.Tables [TableName].Rows.Count == 0) { OldDataDataSet.Tables [TableName].Rows.Add (RowToUpdate); } if (UpdateRequired) DataBase.SetCommonDataSet (OldDataDataSet); } } return true; }
static bool ProcessCreateCommandsFoNextRun (String TransportDirectoryName) { if (File.Exists(TransportData.DataBaseCommandsToProcessFileName(TransportDirectoryName))) { if (WMB.Basics.IsTestRun) WMB.Basics.ReportInformationToEventViewer("AEAGLeisureManagement.ProcessCreateCommandsFoNextRun", "Nothing to do because File \"" + TransportData.DataBaseCommandsToProcessFileName(TransportDirectoryName) + "\" exists"); return true; } if (WMB.Basics.IsTestRun) WMB.Basics.ReportInformationToEventViewer ("AEAGLeisureManagement.ProcessCreateCommandsFoNextRun", "A fresh CommandsToProcess File, named \"" + TransportData.DataBaseCommandsToProcessFileName(TransportDirectoryName) + "\" will be created"); TransportData NewCommandsToProcess = new TransportData(); NewCommandsToProcess.RootDirectory = TransportDirectoryName; // Commands.FillBasicData (); //TODO use only in case of complete restart with DataBase recreation NewCommandsToProcess.FillStandardBookingData(); String WrittenFileName = NewCommandsToProcess.WriteMeOutAsCommandsToProcess(); if (WMB.Basics.IsTestRun) WMB.Basics.ReportInformationToEventViewer ("AEAGLeisureManagement.ProcessCreateCommandsFoNextRun", "File \"" + WrittenFileName + "\" has been written"); return true; }