public void Add(Job aJob) { List.Add(aJob); }
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { DataSet ds = new DataSet(); DataTable dt = new DataTable(); Int32 intItemsProcessed = 0; string Item0 = string.Empty; string Item1 = string.Empty; string Item2 = string.Empty; string Item3 = string.Empty; string Item4 = string.Empty; string Item5 = string.Empty; string Item6 = string.Empty; int intJobID = 0; string strJobName = string.Empty; decimal decJobInterval = 0; bool blnJobEnabled = false; SqlConnection SQLConnectionMonitoring = new SqlConnection(); SqlConnection SQLConnectionMonitoringUpdate = new SqlConnection(); RepositoriesCollection Repositories = new RepositoriesCollection(); JobCollection Jobs = new JobCollection(); Int32 intRunID = 0; string strTableName = string.Empty; string strUniqueColumnName = string.Empty; //Int32 intLastTransaction = 0; string strLastTransaction = "0"; string strSpecialCondition = string.Empty; string strSpecialConditionColumnName = string.Empty; string strSpecialConditionID = string.Empty; string strThrottle = string.Empty; string strRepopulateAtSpecificTime = string.Empty; string strLastRunDate = string.Empty; string strInsertSQLPrefix = string.Empty; string strInsertSQL = string.Empty; string strDeleteSQL = string.Empty; Int32 intColumnCount = 0; //Int32 intCurrentUniqueID = 0; string strCurrentUniqueID = "0"; string strCurrentSpecialConditionID = "0"; string strCmdMonitoring = string.Empty; SqlCommand myCommandMonitoring; SqlCommand myCommandMonitoringUpdate; ArrayList ALColumnName = new ArrayList(); ArrayList ALDataType = new ArrayList(); ArrayList ALDataLength = new ArrayList(); string strTemp = string.Empty; DateTime dtCurrentTime = new DateTime(); DateTime dtTargetTime = new DateTime(); DateTime dtLastRunDate = new DateTime(); DateTime timeLimit = new DateTime(); string strTargetTime = string.Empty; string strTargetTimeHour = string.Empty; string strTargetTimeMinute = string.Empty; Boolean blnContinue = true; try { WriteTolog("Start of process", 1); WriteTolog("Disabling timer", 0); timer1.Enabled = false; WriteTolog("Timer elapsed event start", 0); WriteTolog("File location: " + System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "SQLServerList.xml", 0); WriteTolog("Reading XML...", 0); XML_ReadFile(System.AppDomain.CurrentDomain.BaseDirectory.ToString() + "SQLServerList.xml"); WriteTolog("After XML_ReadFile", 0); WriteTolog("strPGServerItemName: " + strPGServerItemName, 0); WriteTolog("strSQLServerItemName: " + strSQLServerItemName, 0); WriteTolog("strTimerInterval: " + strTimerInterval, 0); string strSqlMonitoring = ("user id=" + strSQLServerMonitoringUsername + ";" + "password="******";server=" + strSQLServerMonitoringItemName + ";" + //"Trusted_Connection=yes;" + "database=" + strSQLServerMonitoringDBName + ";" + "connection timeout=30"); WriteTolog("strSql: " + strSqlMonitoring, 0); SQLConnectionMonitoring = new SqlConnection(strSqlMonitoring); WriteTolog("Opening SQLConnectionMonitoring Connection", 0); SQLConnectionMonitoring.Open(); WriteTolog("Connection to SQLConnectionMonitoring was successfull", 0); SQLConnectionMonitoringUpdate = new SqlConnection(strSqlMonitoring); WriteTolog("Opening SQLConnectionMonitoringUpdate Connection", 0); SQLConnectionMonitoringUpdate.Open(); WriteTolog("Connection to SQLConnectionMonitoringUpdate was successfull", 0); //throw new ApplicationException("This is a test test message"); #region "Get Reporitories" //Get Repository info strCmdMonitoring = "SELECT RepositoryID,RepositoryType,RepositoryName,RepositoryServerName,RepositoryUsername,RepositoryPassword,RepositoryDBName FROM tbl_ServiceRepositories"; WriteTolog("SQL:" + strCmdMonitoring, 0); myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring); SqlDataReader readerMonitoring = myCommandMonitoring.ExecuteReader(); if (readerMonitoring.HasRows) { while (readerMonitoring.Read()) { //Console.WriteLine("{0}\t{1}", reader.GetInt32(0), reader.GetString(1)); WriteTolog(readerMonitoring.GetInt32(0).ToString() + ", " + readerMonitoring.GetString(1) + ", " + readerMonitoring.GetString(2) + ", " + readerMonitoring.GetString(3) + ", " + readerMonitoring.GetString(4) + ", " + readerMonitoring.GetString(5) + ", " + readerMonitoring.GetString(6) + ", ", 0); Item0 = readerMonitoring.GetInt32(0).ToString(); Item1 = readerMonitoring.GetString(1); Item2 = readerMonitoring.GetString(2); Item3 = readerMonitoring.GetString(3); Item4 = readerMonitoring.GetString(4); Item5 = readerMonitoring.GetString(5); Item6 = readerMonitoring.GetString(6); Repository CurrentRepository = new Repository(); CurrentRepository.RepositoryID = Convert.ToInt32(Item0); CurrentRepository.RepositoryType = Item1; CurrentRepository.RepositoryName = Item2; CurrentRepository.RepositoryServerName = Item3; CurrentRepository.RepositoryUsername = Item4; CurrentRepository.RepositoryPassword = Item5; CurrentRepository.RepositoryDBName = Item6; Repositories.Add(CurrentRepository); intItemsProcessed += 1; } } else { //Console.WriteLine("No rows found."); WriteTolog("No rows found.", 0); } readerMonitoring.Close(); readerMonitoring.Dispose(); WriteTolog("Number of repositories: " + Repositories.Count.ToString(), 0); intItemsProcessed = 0; foreach (Repository RepositoryItem in Repositories) { switch (RepositoryItem.RepositoryName) { case "Magnum": strPGServerItemName = RepositoryItem.RepositoryServerName; strPGServerUsername = RepositoryItem.RepositoryUsername; strPGServerPassword = RepositoryItem.RepositoryPassword; strPGServerDB = RepositoryItem.RepositoryDBName; break; case "ZReporting": strSQLServerItemName = RepositoryItem.RepositoryServerName; strSQLServerUsername = RepositoryItem.RepositoryUsername; strSQLServerPassword = RepositoryItem.RepositoryPassword; strSQLServerDBName = RepositoryItem.RepositoryDBName; break; case "DataCollector": strSQLServerItemName = RepositoryItem.RepositoryServerName; strSQLServerUsername = RepositoryItem.RepositoryUsername; strSQLServerPassword = RepositoryItem.RepositoryPassword; strSQLServerDBName = RepositoryItem.RepositoryDBName; break; } } intItemsProcessed = 0; #endregion #region "Get Jobs" //Get the Jobs that need to be processed strCmdMonitoring = "SELECT JobID, JobName, JobInterval, JobEnabled FROM tbl_ServiceJobs ORDER BY JobOrder"; myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring); SqlDataReader readerJobs = myCommandMonitoring.ExecuteReader(); if (readerJobs.HasRows) { while (readerJobs.Read()) { WriteTolog(readerJobs.GetInt32(0).ToString() + ", " + readerJobs.GetString(1) + ", " + readerJobs.GetDecimal(2).ToString() + ", " + readerJobs.GetBoolean(3).ToString(), 0); intJobID = readerJobs.GetInt32(0); strJobName = readerJobs.GetString(1); decJobInterval = readerJobs.GetDecimal(2); blnJobEnabled = readerJobs.GetBoolean(3); Job CurrentJob = new Job(); CurrentJob.JobID = intJobID; CurrentJob.JobName = strJobName; CurrentJob.JobInterval = decJobInterval; //This will need to be changed if we add more jobs because currently this is setting the timers interval //And because we only have one job we can use the timer's interval to do the wating strTimerInterval = CurrentJob.JobInterval.ToString(); CurrentJob.JobEnabled = blnJobEnabled; Jobs.Add(CurrentJob); } } WriteTolog("Number of Jobs: " + Jobs.Count.ToString(), 0); readerJobs.Close(); readerJobs.Dispose(); intItemsProcessed = 0; #endregion #region "Connect Database Connections" string connstring = String.Format("Server=" + strPGServerItemName + ";Port=5432;" + "User Id=" + strPGServerUsername + ";Password="******";Pooling=false;Database=" + strPGServerDB + ";CommandTimeout=600;"); WriteTolog("connstring: " + connstring, 0); // Making connection with Npgsql provider NpgsqlConnection PGSQLConnection1 = new NpgsqlConnection(connstring); PGSQLConnection1.Open(); WriteTolog("Connection to Postgres was successfull", 0); string strSql = ("user id=" + strSQLServerUsername + ";" + "password="******";server=" + strSQLServerItemName + ";" + "Trusted_Connection=yes;" + "database=" + strSQLServerDBName + ";" + "connection timeout=30"); WriteTolog("strSql: " + strSql, 0); SqlConnection SQLConnection1 = new SqlConnection(strSql); WriteTolog("Opening SQL Connection", 0); SQLConnection1.Open(); WriteTolog("Connection to SQL was successfull", 0); #endregion #region "Process each Job" //Check job intervals and process jobs if they should be processed foreach (Job JobItem in Jobs) { intJobID = JobItem.JobID; strJobName = JobItem.JobName; decJobInterval = JobItem.JobInterval; blnJobEnabled = JobItem.JobEnabled; #region "Update Monitoring table" strCmdMonitoring = "SELECT Count(RunID) FROM tbl_ServiceMonitor WHERE JobID = " + intJobID.ToString(); WriteTolog(strCmdMonitoring, 0); using (myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring)) { intRunID = Convert.ToInt32(myCommandMonitoring.ExecuteScalar().ToString()); } if (intRunID == 0) { strCmdMonitoring = "INSERT INTO tbl_ServiceMonitor" + " ([JobID],[StartDateTime],[Status])" + " VALUES (" + intJobID.ToString() + ", '" + System.DateTime.Now.ToString("u").Replace("Z", "") + "', 2);" + " Select @@IDENTITY as newId;"; WriteTolog(strCmdMonitoring, 0); using (myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring)) { intRunID = Convert.ToInt32(myCommandMonitoring.ExecuteScalar().ToString()); } } else { strCmdMonitoring = "SELECT RunID FROM tbl_ServiceMonitor WHERE JobID = " + intJobID.ToString(); WriteTolog(strCmdMonitoring, 0); using (myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring)) { intRunID = Convert.ToInt32(myCommandMonitoring.ExecuteScalar().ToString()); } strCmdMonitoring = "UPDATE tbl_ServiceMonitor" + " SET [StartDateTime] = '" + System.DateTime.Now.ToString("u").Replace("Z", "") + "', [EndDateTime] = null" + ", [Status] = 2 WHERE RunID = " + intRunID.ToString(); WriteTolog(strCmdMonitoring, 0); myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring); myCommandMonitoring.ExecuteNonQuery(); } #endregion if (blnJobEnabled == true) { //strCmdMonitoring = "SELECT RunID, JobID, StartDateTime, EndDateTime, Status FROM tbl_ServiceMonitor WHERE JobID = " + intJobID.ToString() + " and EndDateTime is null"; //myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring); //SqlDataReader readerStatus = myCommandMonitoring.ExecuteReader(); //if (readerMonitoring.HasRows) //{ // while (readerMonitoring.Read()) // { // } //} //Get all the tables for this job and move the data for each table string strCmdGetTables = "SELECT TableName, UniqueColumnName, LastUID, isnull(SpecialCondition,0), isnull(SpecialConditionColumnName,0), IsNull(SpecialConditionID,0), Throttle, IsNull(RepopulateAtSpecificTime,0), IsNull(LastRunDate,0) FROM tbl_ServiceTables WHERE Enabled = 1 and JobID = " + intJobID.ToString(); SqlCommand myCommandMGetTables = new SqlCommand(strCmdGetTables, SQLConnectionMonitoring); SqlDataReader readerGetTables = myCommandMGetTables.ExecuteReader(); if (readerGetTables.HasRows) { //loop through the tables while (readerGetTables.Read()) { //WriteTolog(readerGetTables.GetString(0), 0); strTableName = readerGetTables.GetString(0); strUniqueColumnName = readerGetTables.GetString(1); //intLastTransaction = readerGetTables.GetInt32(2); strLastTransaction = readerGetTables.GetString(2); strSpecialCondition = readerGetTables.GetString(3); strSpecialConditionColumnName = readerGetTables.GetString(4); strSpecialConditionID = readerGetTables.GetString(5); strThrottle = readerGetTables.GetInt32(6).ToString(); if (!readerGetTables.IsDBNull(7)) { strRepopulateAtSpecificTime = readerGetTables.GetString(7).ToString(); } else { strRepopulateAtSpecificTime = "0"; } if (!readerGetTables.IsDBNull(8)) { strLastRunDate = readerGetTables.GetString(8).ToString(); if (strLastRunDate == "0") { dtCurrentTime = System.DateTime.Now; dtLastRunDate = new DateTime(dtCurrentTime.Year, dtCurrentTime.Month, dtCurrentTime.Day, Convert.ToInt16(0), Convert.ToInt16(0), 0); dtLastRunDate = dtLastRunDate.AddDays(-2); strLastRunDate = dtLastRunDate.ToString(); } } else { dtCurrentTime = System.DateTime.Now; dtLastRunDate = new DateTime(dtCurrentTime.Year, dtCurrentTime.Month, dtCurrentTime.Day - 2, Convert.ToInt16(0), Convert.ToInt16(0), 0); strLastRunDate = dtLastRunDate.ToString(); } dtLastRunDate = Convert.ToDateTime(strLastRunDate); WriteTolog("dtLastRunDate: " + dtLastRunDate, 0); WriteTolog("__________________________________________", 1); WriteTolog("Processing table: " + strTableName, 1); //WriteTolog("-----------------------------------------", 1); //select column_name, Data_type, Character_maximum_length from information_schema.columns where table_name='member'; #region "Get the tables data and insert it into the SQL table" //ALColumnNames.Clear(); //ALDataTypes.Clear(); //ALLengths.Clear(); //string sql = "SELECT * FROM " + strTableName; string sql = "select column_name, Data_type, Character_maximum_length from information_schema.columns where table_name='" + strTableName + "' ORDER BY ordinal_Position;"; WriteTolog("Postgres: " + sql, 0); NpgsqlDataAdapter adapterGetColumns = new NpgsqlDataAdapter(sql, PGSQLConnection1); DataSet DSColumns = new DataSet(); adapterGetColumns.Fill(DSColumns, "Columns"); strInsertSQLPrefix = "INSERT INTO " + strTableName + " ("; intColumnCount = 1; WriteTolog("Clear Array Lists", 0); ALColumnName.Clear(); ALDataType.Clear(); ALDataLength.Clear(); WriteTolog("Starting loop through columns", 0); foreach (DataRow row in DSColumns.Tables[0].Rows) { //ALColumnNames.Add(row[0].ToString()); //ALDataTypes.Add(row[1].ToString()); //ALLengths.Add(row[2].ToString()); strInsertSQLPrefix += row[0].ToString(); ALColumnName.Add(row[0].ToString()); ALDataType.Add(row[1].ToString()); ALDataLength.Add(row[2].ToString()); if (DSColumns.Tables[0].Rows.Count > 1) { if (intColumnCount != DSColumns.Tables[0].Rows.Count) strInsertSQLPrefix += ","; } intColumnCount += 1; } WriteTolog("Completed loop through columns", 0); strInsertSQLPrefix += ") Values ('"; //throw new ApplicationException("This is a test test message"); blnContinue = true; blnDoBulkInsert = false; switch (strSpecialCondition) { case "0": if (strRepopulateAtSpecificTime != "0") { //int intPos = strSpecialConditionColumnName.IndexOf("="); dtCurrentTime = System.DateTime.Now; //strTargetTime = strSpecialConditionColumnName.Substring(intPos + 1); strTargetTime = strRepopulateAtSpecificTime; strTargetTimeHour = strTargetTime.Substring(0, 2); strTargetTimeMinute = strTargetTime.Substring(3, 2); timeLimit = new DateTime(dtCurrentTime.Year, dtCurrentTime.Month, dtCurrentTime.Day, Convert.ToInt16(strTargetTimeHour), Convert.ToInt16(strTargetTimeMinute), 0); WriteTolog("dtCurrentTime: " + dtCurrentTime.ToString(), 1); WriteTolog("timeLimit: " + timeLimit.ToString(), 1); if (dtCurrentTime > timeLimit) { WriteTolog("dtCurrentTime > timeLimit", 0); TimeSpan sinceLastRun = DateTime.Now - dtLastRunDate; WriteTolog("sinceLastRun: " + sinceLastRun.ToString(), 0); if (sinceLastRun.TotalHours > 23) { WriteTolog("dtLastRunDate:" + dtLastRunDate.ToString(), 1); WriteTolog("sinceLastRun.TotalHours > 23", 0); sql = "TRUNCATE TABLE " + strTableName; WriteTolog("sql: " + sql, 0); SqlCommand myCommand = new SqlCommand(sql, SQLConnection1); blnContinue = true; myCommand.ExecuteNonQuery(); blnDoBulkInsert = true; WriteTolog("Table has been Truncated: " + strTableName, 0); } else { WriteTolog("dtLastRunDate:" + dtLastRunDate.ToString(), 1); WriteTolog("sinceLastRun.TotalHours !> 23", 1); blnDoBulkInsert = false; } } else { WriteTolog("dtCurrentTime !> timeLimit", 1); blnDoBulkInsert = false; } } sql = "SELECT * FROM " + strTableName; if (blnDoBulkInsert == false) { sql = sql + " WHERE " + strUniqueColumnName + " > '" + strLastTransaction.ToString() + "' ORDER BY " + strUniqueColumnName; //We ignore the limit so that all the rows are replaced and then when //there job runs normally for this table it will start copying from the last uid again if (strThrottle != "0") { sql += " LIMIT " + strThrottle; } } break; case "ReplaceAll": //Run the query to truncate the table if (strSpecialCondition == "ReplaceAll") { #region "ReplaceAll" //if (strSpecialConditionColumnName.Contains("RunTime=")) if (strRepopulateAtSpecificTime != "0") { //int intPos = strSpecialConditionColumnName.IndexOf("="); dtCurrentTime = System.DateTime.Now; //strTargetTime = strSpecialConditionColumnName.Substring(intPos + 1); strTargetTime = strRepopulateAtSpecificTime; strTargetTimeHour = strTargetTime.Substring(0, 2); strTargetTimeMinute = strTargetTime.Substring(3, 2); timeLimit = new DateTime(dtCurrentTime.Year, dtCurrentTime.Month, dtCurrentTime.Day, Convert.ToInt16(strTargetTimeHour), Convert.ToInt16(strTargetTimeMinute), 0); WriteTolog("dtCurrentTime: " + dtCurrentTime.ToString(), 1); WriteTolog("timeLimit: " + timeLimit.ToString(), 1); if (dtCurrentTime > timeLimit) { WriteTolog("dtCurrentTime > timeLimit", 0); TimeSpan sinceLastRun = DateTime.Now - dtLastRunDate; WriteTolog("sinceLastRun: " + sinceLastRun.ToString(), 0); if (sinceLastRun.TotalHours > 23) { WriteTolog("dtLastRunDate:" + dtLastRunDate.ToString(), 1); WriteTolog("sinceLastRun.TotalHours > 23", 0); sql = "TRUNCATE TABLE " + strTableName; WriteTolog("sql: " + sql, 0); SqlCommand myCommand = new SqlCommand(sql, SQLConnection1); blnContinue = true; myCommand.ExecuteNonQuery(); blnDoBulkInsert = true; WriteTolog("Table has been Truncated: " + strTableName, 0); } else { WriteTolog("dtLastRunDate:" + dtLastRunDate.ToString(), 1); WriteTolog("sinceLastRun.TotalHours !> 23", 1); blnContinue = false; blnDoBulkInsert = false; } } else { WriteTolog("dtCurrentTime !> timeLimit", 1); blnContinue = false; blnDoBulkInsert = false; } } else { sql = "TRUNCATE TABLE " + strTableName; WriteTolog("sql: " + sql, 0); SqlCommand myCommand = new SqlCommand(sql, SQLConnection1); myCommand.ExecuteNonQuery(); } #endregion } sql = "SELECT * FROM " + strTableName; break; case "DateDriven": string strcolumnNames = string.Empty; string strcolumnName = string.Empty; #region "DateDriven" for (int i = 0; i < ALColumnName.Count; i++) { //if (i == 0) // strcolumnNames = "'"; if (i != ALColumnName.Count) { if (i > 0) strcolumnNames += ","; } if (ALColumnName[i].ToString() == strSpecialConditionColumnName) { //strcolumnName += "to_char(" + ALColumnName[i].ToString() + ", 'YYYY-MM-DD HH24:MI:SS')"; strcolumnNames += "to_char(" + ALColumnName[i].ToString() + ", 'YYYY-MM-DD HH24:MI:SS') as \"" + strSpecialConditionColumnName + "\""; } else { strcolumnNames += ALColumnName[i].ToString(); } } //sql = "SELECT " + strcolumnNames + " FROM " + strTableName + " WHERE " + strUniqueColumnName + " > '" + strLastTransaction + "' and " + strSpecialConditionColumnName + " is not null and " + strSpecialConditionColumnName + " > '" + strSpecialConditionID.ToString() + "' ORDER BY " + strSpecialConditionColumnName; sql = "SELECT " + strcolumnNames + " FROM " + strTableName + " WHERE " + strSpecialConditionColumnName + " is not null and to_char(" + strSpecialConditionColumnName + ", 'YYYY-MM-DD HH24:MI:SS') > '" + strSpecialConditionID.ToString() + "' ORDER BY " + strSpecialConditionColumnName; #endregion break; case "ReplaceRowsBasedOnDate": string strcolumnNames2 = string.Empty; string strcolumnName2 = string.Empty; #region "ReplaceRowsBasedOnDate" if (strRepopulateAtSpecificTime != "0") { #region "if (strRepopulateAtSpecificTime != 0)" //int intPos = strSpecialConditionColumnName.IndexOf("="); dtCurrentTime = System.DateTime.Now; //strTargetTime = strSpecialConditionColumnName.Substring(intPos + 1); strTargetTime = strRepopulateAtSpecificTime; strTargetTimeHour = strTargetTime.Substring(0, 2); strTargetTimeMinute = strTargetTime.Substring(3, 2); timeLimit = new DateTime(dtCurrentTime.Year, dtCurrentTime.Month, dtCurrentTime.Day, Convert.ToInt16(strTargetTimeHour), Convert.ToInt16(strTargetTimeMinute), 0); WriteTolog("dtCurrentTime: " + dtCurrentTime.ToString(), 1); WriteTolog("timeLimit: " + timeLimit.ToString(), 1); if (dtCurrentTime > timeLimit) { WriteTolog("dtCurrentTime > timeLimit", 0); TimeSpan sinceLastRun = DateTime.Now - dtLastRunDate; WriteTolog("sinceLastRun: " + sinceLastRun.ToString(), 0); if (sinceLastRun.TotalHours > 23) { WriteTolog("dtLastRunDate:" + dtLastRunDate.ToString(), 1); WriteTolog("sinceLastRun.TotalHours > 23", 0); sql = "TRUNCATE TABLE " + strTableName; WriteTolog("sql: " + sql, 0); SqlCommand myCommand = new SqlCommand(sql, SQLConnection1); blnContinue = true; myCommand.ExecuteNonQuery(); blnDoBulkInsert = true; WriteTolog("Table has been Truncated: " + strTableName, 0); sql = "SELECT * FROM " + strTableName; if (strThrottle != "0") { sql += " LIMIT " + strThrottle; } } else { WriteTolog("dtLastRunDate:" + dtLastRunDate.ToString(), 1); WriteTolog("sinceLastRun.TotalHours !> 23", 1); for (int i = 0; i < ALColumnName.Count; i++) { if (i != ALColumnName.Count) { if (i > 0) strcolumnNames2 += ","; } if (ALColumnName[i].ToString() == strSpecialConditionColumnName) { strcolumnNames2 += "to_char(" + ALColumnName[i].ToString() + ", 'YYYY-MM-DD HH24:MI:SS') as \"" + strSpecialConditionColumnName + "\""; } else { strcolumnNames2 += ALColumnName[i].ToString(); } } if (strSpecialConditionID == "0") strSpecialConditionID = "1900-01-01"; sql = "SELECT " + strcolumnNames2 + " FROM " + strTableName + " WHERE to_char(" + strSpecialConditionColumnName + ", 'YYYY-MM-DD HH24:MI:SS') > '" + strSpecialConditionID.ToString() + "' ORDER BY " + strSpecialConditionColumnName; blnDoBulkInsert = false; } } else { WriteTolog("dtCurrentTime !> timeLimit", 1); for (int i = 0; i < ALColumnName.Count; i++) { if (i != ALColumnName.Count) { if (i > 0) strcolumnNames2 += ","; } if (ALColumnName[i].ToString() == strSpecialConditionColumnName) { strcolumnNames2 += "to_char(" + ALColumnName[i].ToString() + ", 'YYYY-MM-DD HH24:MI:SS') as \"" + strSpecialConditionColumnName + "\""; } else { strcolumnNames2 += ALColumnName[i].ToString(); } } if (strSpecialConditionID == "0") strSpecialConditionID = "1900-01-01"; sql = "SELECT " + strcolumnNames2 + " FROM " + strTableName + " WHERE to_char(" + strSpecialConditionColumnName + ", 'YYYY-MM-DD HH24:MI:SS') > '" + strSpecialConditionID.ToString() + "' ORDER BY " + strSpecialConditionColumnName; blnDoBulkInsert = false; } #endregion } else { #region "if (strRepopulateAtSpecificTime == 0)" for (int i = 0; i < ALColumnName.Count; i++) { if (i != ALColumnName.Count) { if (i > 0) strcolumnNames2 += ","; } if (ALColumnName[i].ToString() == strSpecialConditionColumnName) { strcolumnNames2 += "to_char(" + ALColumnName[i].ToString() + ", 'YYYY-MM-DD HH24:MI:SS') as \"" + strSpecialConditionColumnName + "\""; } else { strcolumnNames2 += ALColumnName[i].ToString(); } } if (strSpecialConditionID == "0") strSpecialConditionID = "1900-01-01"; sql = "SELECT " + strcolumnNames2 + " FROM " + strTableName + " WHERE to_char(" + strSpecialConditionColumnName + ", 'YYYY-MM-DD HH24:MI:SS') > '" + strSpecialConditionID.ToString() + "' ORDER BY " + strSpecialConditionColumnName; blnDoBulkInsert = false; if (strThrottle != "0") { sql += " LIMIT " + strThrottle; } #endregion } #endregion break; default: break; } if (blnContinue == true) { WriteTolog("sql: " + sql, 0); //NpgsqlDataAdapter adapterGetData = new NpgsqlDataAdapter(sql, PGSQLConnection1); DataSet DSData = new DataSet(); //adapterGetData.Fill(DSData, "Data"); using (NpgsqlCommand NpgCommand = new NpgsqlCommand(sql, PGSQLConnection1)) { using (NpgsqlDataReader myReader = NpgCommand.ExecuteReader()) { DataTable myTable = new DataTable(); myTable.Load(myReader); DSData.Tables.Add(myTable); } } intItemsProcessed = 0; WriteTolog("Number of rows to process: " + DSData.Tables[0].Rows.Count.ToString(), 1); //if ((strSpecialCondition == "ReplaceAll") && (strSpecialConditionColumnName.Contains("RunTime="))) //if ((strSpecialCondition == "ReplaceAll") && (strRepopulateAtSpecificTime != "")) //if (strRepopulateAtSpecificTime != "0") if (blnDoBulkInsert == true) { WriteTolog("Re-populating table: " + strTableName, 1); using (SqlConnection cn = new SqlConnection(strSql)) { cn.Open(); using (SqlBulkCopy copy = new SqlBulkCopy(cn)) { copy.DestinationTableName = strTableName; foreach (string strColName in ALColumnName) { copy.ColumnMappings.Add(strColName.Trim(), strColName.Trim()); } copy.WriteToServer(DSData.Tables[0]); } SqlCommand myCommand = new SqlCommand("UPDATE tbl_ServiceTables SET LastRunDate = '" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' WHERE TableName = '" + strTableName + "'", cn); myCommand.ExecuteNonQuery(); cn.Close(); cn.Dispose(); WriteTolog("Replaced " + DSData.Tables[0].Rows.Count.ToString() + " rows",1); } } else { foreach (DataRow row in DSData.Tables[0].Rows) { intColumnCount = 1; //WriteTolog("intColumnCount: " + intColumnCount.ToString(), 0); strInsertSQL = strInsertSQLPrefix; strTemp = string.Empty; //loop through all the columns in the current row for (int i = 0; i < row.ItemArray.Count(); i++) { string s = row[i].ToString(); //WriteTolog("i: " + i.ToString() + " | column: " + DSData.Tables[0].Columns[intColumnCount - 1].ColumnName.ToString(), 0); if (DSData.Tables[0].Columns[intColumnCount - 1].ColumnName == strUniqueColumnName) { //intCurrentUniqueID = Convert.ToInt32(row[i].ToString()); strCurrentUniqueID = (row[i].ToString()); //WriteTolog("intCurrentUniqueID: " + intCurrentUniqueID.ToString(), 0); } if ((strSpecialCondition == "DateDriven") || (strSpecialCondition == "ReplaceRowsBasedOnDate")) { if (DSData.Tables[0].Columns[intColumnCount - 1].ColumnName == strSpecialConditionColumnName) { //WriteTolog("intCurrentUniqueID: " + intCurrentUniqueID.ToString(), 0); DateTime newDate = Convert.ToDateTime(row[i].ToString()); #region "Get Date in correct format" //strCurrentSpecialConditionID = newDate.Year + "-" + newDate.Month + "-" + newDate.Day + " " + newDate.Hour + ":" + newDate.Minute + ":" + newDate.Second; string strMonth = string.Empty; string strDay = string.Empty; string strHour = string.Empty; string strMinute = string.Empty; string strSecond = string.Empty; if (newDate.Month < 10) strMonth = "0" + newDate.Month.ToString(); else strMonth = newDate.Month.ToString(); if (newDate.Day < 10) strDay = "0" + newDate.Day.ToString(); else strDay = newDate.Day.ToString(); if (newDate.Hour < 10) strHour = "0" + newDate.Hour.ToString(); else strHour = newDate.Hour.ToString(); if (newDate.Minute < 10) strMinute = "0" + newDate.Minute.ToString(); else strMinute = newDate.Minute.ToString(); if (newDate.Second < 10) strSecond = "0" + newDate.Second.ToString(); else strSecond = newDate.Second.ToString(); #endregion //strInsertSQL += newDate.Year + "-" + strMonth + "-" + strDay + " " + strHour + ":" + strMinute + ":" + strSecond; strCurrentSpecialConditionID = newDate.Year + "-" + strMonth + "-" + strDay + " " + strHour + ":" + strMinute + ":" + strSecond; } } //If the item is a date then create the date else do string adjustments if (isDate(row[i].ToString()) == true) { if (ALDataType[intColumnCount - 1].ToString().Trim() == "timestamp without time zone") { DateTime newDate = Convert.ToDateTime(row[i].ToString()); #region "Get Date in correct format" string strMonth = string.Empty; string strDay = string.Empty; string strHour = string.Empty; string strMinute = string.Empty; string strSecond = string.Empty; if (newDate.Month < 10) strMonth = "0" + newDate.Month.ToString(); else strMonth = newDate.Month.ToString(); if (newDate.Day < 10) strDay = "0" + newDate.Day.ToString(); else strDay = newDate.Day.ToString(); if (newDate.Hour < 10) strHour = "0" + newDate.Hour.ToString(); else strHour = newDate.Hour.ToString(); if (newDate.Minute < 10) strMinute = "0" + newDate.Minute.ToString(); else strMinute = newDate.Minute.ToString(); if (newDate.Second < 10) strSecond = "0" + newDate.Second.ToString(); else strSecond = newDate.Second.ToString(); #endregion strInsertSQL += newDate.Year + "-" + strMonth + "-" + strDay + " " + strHour + ":" + strMinute + ":" + strSecond; } else if (ALDataType[intColumnCount - 1].ToString().Trim() == "date") { //strInsertSQL += row[i].ToString(); DateTime newDate = Convert.ToDateTime(row[i].ToString()); #region "Get Date in correct format" string strMonth = string.Empty; string strDay = string.Empty; string strHour = string.Empty; string strMinute = string.Empty; string strSecond = string.Empty; if (newDate.Month < 10) strMonth = "0" + newDate.Month.ToString(); else strMonth = newDate.Month.ToString(); if (newDate.Day < 10) strDay = "0" + newDate.Day.ToString(); else strDay = newDate.Day.ToString(); #endregion strInsertSQL += newDate.Year + "-" + strMonth + "-" + strDay; } else { strInsertSQL += row[i].ToString(); } } else { switch (ALDataType[intColumnCount - 1].ToString().Trim()) { case "character": strInsertSQL += row[i].ToString().Substring(0, Convert.ToInt16(ALDataLength[intColumnCount - 1])); break; case "character varying": strTemp = row[i].ToString(); strTemp = strTemp.Replace("\"", ""); if (row[i].ToString().Contains("'") == true) { strInsertSQL += strTemp.Replace("'", ""); } else { strInsertSQL += strTemp; } break; //case "double precision": // string p = ""; // break; case "boolean": if (row[i].ToString().Length > 0) { //2012-05-29 - WG - The below line was replaced by the 8 lines (two if statements) //so that the SQL table columns data type can be a bit instead of a char(1) //strInsertSQL += row[i].ToString().Substring(0, 1); if (row[i].ToString().Substring(0, 1) == "T") { strInsertSQL += "1"; } if (row[i].ToString().Substring(0, 1) == "F") { strInsertSQL += "0"; } } else strInsertSQL += null; break; default: strInsertSQL += row[i].ToString(); break; } //if (ALDataType[intColumnCount - 1].ToString().Trim() == "character") //{ // strInsertSQL += row[i].ToString().Substring(0, Convert.ToInt16(ALDataLength[intColumnCount - 1])); //} //else //{ // strInsertSQL += row[i].ToString(); //} } if (intColumnCount == DSData.Tables[0].Columns.Count) { strInsertSQL += "'"; } else { if (DSData.Tables[0].Columns.Count > 1) { strInsertSQL += "','"; } else { strInsertSQL += "'"; } } intColumnCount += 1; } strInsertSQL += ")"; //If the table is using the special condition "ReplaceRowsBasedOnDate" //Then we need to delete the row from the table before we insert the updated row if (strSpecialCondition == "ReplaceRowsBasedOnDate") { strDeleteSQL = "Delete FROM " + strTableName + " WHERE " + strUniqueColumnName + " = '" + strCurrentUniqueID + "'"; WriteTolog("strDeleteSQL: " + strDeleteSQL, 0); SqlCommand myDelCommand = new SqlCommand(strDeleteSQL, SQLConnection1); myDelCommand.ExecuteNonQuery(); myDelCommand.Dispose(); } //Run the query to insert into the cube table WriteTolog("strInsertSQL: " + strInsertSQL, 0); SqlCommand myCommand = new SqlCommand(strInsertSQL, SQLConnection1); myCommand.ExecuteNonQuery(); switch (strSpecialCondition) { case "0": strCmdMonitoring = "UPDATE tbl_ServiceTables" + //" SET LastUID = " + intCurrentUniqueID.ToString() + " SET LastUID = '" + strCurrentUniqueID + "'" + " WHERE TableName = '" + strTableName + "'"; WriteTolog(strCmdMonitoring, 0); myCommandMonitoringUpdate = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoringUpdate); myCommandMonitoringUpdate.ExecuteNonQuery(); break; case "DateDriven": strCmdMonitoring = "UPDATE tbl_ServiceTables" + " SET SpecialConditionID = '" + strCurrentSpecialConditionID + "'" + " WHERE TableName = '" + strTableName + "'"; WriteTolog(strCmdMonitoring, 0); myCommandMonitoringUpdate = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoringUpdate); myCommandMonitoringUpdate.ExecuteNonQuery(); break; case "ReplaceRowsBasedOnDate": strCmdMonitoring = "UPDATE tbl_ServiceTables" + " SET SpecialConditionID = '" + strCurrentSpecialConditionID + "'" + " WHERE TableName = '" + strTableName + "'"; WriteTolog(strCmdMonitoring, 0); myCommandMonitoringUpdate = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoringUpdate); myCommandMonitoringUpdate.ExecuteNonQuery(); break; } //if (strSpecialCondition != "ReplaceAll") //{ // strCmdMonitoring = "UPDATE tbl_ServiceTables" + // //" SET LastUID = " + intCurrentUniqueID.ToString() + // " SET LastUID = '" + strCurrentUniqueID + "'" + // " WHERE TableName = '" + strTableName + "'"; // WriteTolog(strCmdMonitoring, 0); // myCommandMonitoringUpdate = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoringUpdate); // myCommandMonitoringUpdate.ExecuteNonQuery(); //} intItemsProcessed += 1; } //WriteTolog("________________________________", 1); WriteTolog("Number of items processed: " + intItemsProcessed.ToString(), 1); WriteTolog("__________________________________________", 1); } DSData.Clear(); DSData = null; } else { string s = "Do not Conitune"; } //Application.DoEvents(); #endregion } //while (readerGetTables.Read()) } strTableName = ""; readerGetTables.Close(); readerGetTables.Dispose(); myCommandMGetTables.Dispose(); PGSQLConnection1.Close(); SQLConnection1.Close(); WriteTolog("Reader Closed", 0); //strCmdMonitoring = "UPDATE tbl_ServiceTables" + // " SET LastUID = " + intCurrentUniqueID.ToString() + // " WHERE TableName = '" + strTableName + "'"; //WriteTolog(strCmdMonitoring, 0); //myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring); //myCommandMonitoring.ExecuteNonQuery(); strCmdMonitoring = "UPDATE tbl_ServiceMonitor" + " SET EndDateTime = '" + System.DateTime.Now.ToString("u").Replace("Z", "") + "', Status = 4" + " WHERE RunID = " + intRunID; WriteTolog(strCmdMonitoring, 0); myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring); myCommandMonitoring.ExecuteNonQuery(); } } #endregion SQLConnectionMonitoring.Close(); WriteTolog("Closing SQLConnectionMonitoring", 0); SQLConnectionMonitoringUpdate.Close(); WriteTolog("Closing SQLConnectionMonitoringUpdate", 0); RemoveOldFiles(); WriteTolog("End of process", 1); WriteTolog("strTimerInterval in Minutes: " + strTimerInterval, 0); strTimerInterval = ConvertMinutesToMilliseconds(Convert.ToDouble(strTimerInterval)).ToString(); WriteTolog("strTimerInterval in Milliseconds: " + strTimerInterval, 0); timer1.Interval = Convert.ToInt32(strTimerInterval); WriteTolog("Enabling timer", 0); timer1.Enabled = true; } catch (Exception ex) { WriteTolog("error: " + ex.Message, 1); WriteTolog("strTimerInterval in Minutes: " + strTimerInterval, 0); strTimerInterval = ConvertMinutesToMilliseconds(Convert.ToDouble(strTimerInterval)).ToString(); WriteTolog("strTimerInterval in Milliseconds: " + strTimerInterval, 0); if (strTableName != "") { //SendNotificationEmail("There was an issue on table: " + strTableName + " - \r\n\r\n" + ex.Message); SendNotificationEmail("There was an issue on table: " + strTableName + " <br /><br />Error message: <br />" + ex.Message); } else { SendNotificationEmail("Error message: <br />" + ex.Message); } timer1.Interval = Convert.ToInt32(strTimerInterval); //throw; WriteTolog("Enabling timer", 0); timer1.Enabled = true; //if (SQLConnectionMonitoring.State == ConnectionState.Open) //{ // //strCmdMonitoring = "UPDATE tbl_ServiceTables" + // // " SET LastUID = " + intCurrentUniqueID.ToString() + // // " WHERE TableName = '" + strTableName + "'"; // //WriteTolog(strCmdMonitoring, 1); // //myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring); // //myCommandMonitoring.ExecuteNonQuery(); // strCmdMonitoring = "UPDATE tbl_ServiceMonitor" + // " SET EndDateTime = '" + System.DateTime.Now.ToString("u").Replace("Z", "") + "', Status = 3" + // " WHERE RunID = " + intRunID; // WriteTolog(strCmdMonitoring, 0); // myCommandMonitoring = new SqlCommand(strCmdMonitoring, SQLConnectionMonitoring); // myCommandMonitoring.ExecuteNonQuery(); // SQLConnectionMonitoring.Close(); // WriteTolog("Closing SQLConnectionMonitoring", 1); // SQLConnectionMonitoringUpdate.Close(); // WriteTolog("Closing SQLConnectionMonitoringUpdate", 1); //} ////timer1.Interval = Convert.ToInt32(strTimerInterval); WriteTolog("End of process", 1); } }