/// <summary> /// Initiates the synchronization of source and target databases by cycling /// through a DataSyncActionsCollection and executing the script member /// of each DataSyncAction object. /// </summary> /// <returns> /// True - synchronized /// True - SyncActionsCollection.Count == 0, because CompareForSync() not called. /// False - exceptions encountered /// </returns> public bool Sync() { throw new NotImplementedException(); try { var ticks = DateTime.Now.Ticks; TotalDataEventWaitTime = new TimeSpan(ticks); TotalDataEventWaitTime = TotalDataEventWaitTime.Subtract(TotalDataEventWaitTime); var start = new TimeSpan(ticks); DataTimer.RaiseTimerStatusEvent("Starting synchronization of source and target databases."); Exceptions.Clear(); // For server specific stuff SyncInternal(); var finish = new TimeSpan(DateTime.Now.Ticks); var interval = finish.Subtract(start); interval = interval.Subtract(TotalDataEventWaitTime); DataTimer.RaiseTimerStatusEvent(interval, "Finished synchronization."); } catch (Exception exception) { Exceptions.Add(exception); } return(Exceptions.Count == 0); }
/// <summary> /// Constructor initializes the instance specific DataSyncManager and sets up all /// objects needed to perform CompareForSync() and Sync() methods from the /// source server and target connection. The source server may be a custom server /// model pulled from a Json file or created on the fly and passed to this DataSyncManager object. /// </summary> /// <param name="sourceServer">The source Server object.</param> /// <param name="targetDataConnectionInfo">target data connection info</param> /// <param name="dataProperties">data properties</param> protected DataSyncManager(Server sourceServer, DataConnectionInfo targetDataConnectionInfo, DataProperties dataProperties) { throw new NotImplementedException(); Exceptions = new List <Exception>(); DataTimer = new DataTimer(); DataSyncActionsCollection = new DataSyncActionsCollection(); DataProperties = dataProperties ?? new DataProperties(); TotalDataEventWaitTime = new TimeSpan(DateTime.Now.Ticks); TotalDataEventWaitTime = TotalDataEventWaitTime.Subtract(TotalDataEventWaitTime); SourceDataConnectionInfo = null; SourceDataConnectionManager = null; SourceServer = sourceServer; // Could be null... TargetServer = null; try { TargetDataConnectionInfo = targetDataConnectionInfo; } catch (Exception ex) { TargetDataConnectionInfo = null; TargetDataConnectionManager = null; Exceptions.Add(ex); } }
/// <summary> /// Start or stop the timer depending upon the current state. /// </summary> private void btnStartStopTimer_Click(object sender, RoutedEventArgs e) { if (DataTimer.IsEnabled) { DataTimer.Stop(); btnStartStopTimer.Content = "Start"; } else { DataTimer.Start(); btnStartStopTimer.Content = "Stop"; } }
protected DataSyncManager() { throw new NotImplementedException(); Exceptions = new List <Exception>(); DataTimer = new DataTimer(); DataSyncActionsCollection = new DataSyncActionsCollection(); DataProperties = new DataProperties(); TotalDataEventWaitTime = new TimeSpan(DateTime.Now.Ticks); TotalDataEventWaitTime = TotalDataEventWaitTime.Subtract(TotalDataEventWaitTime); SourceDataConnectionInfo = null; SourceDataConnectionManager = null; SourceServer = null; TargetDataConnectionInfo = null; TargetDataConnectionManager = null; TargetServer = null; }
private void LoadData() { try { DataRow row = dataManager.RetriveNowData("01"); if (row != null) { //AlertPowerAC = (ObjFloat(row["power"]) < al.MinPowerAC || ObjFloat(row["power"]) > al.MaxPowerAC) ? true : false; //lbPowerAC.BackColor = (AlertPowerAC) ? BackColorAlarm : BackColorNormal; //lbPowerAC.ForeColor = (AlertPowerAC) ? ForeColorAlarm : ForeColorNormal; //lbPowerAC.Text = ObjString(row["power"]); //AlertCurrentAC = (ObjFloat(row["current"]) < al.MinCurrentAC || ObjFloat(row["current"]) > al.MaxCurrentAC) ? true : false; //lbCurrentAC.BackColor = (AlertCurrentAC) ? BackColorAlarm : BackColorNormal; //lbCurrentAC.ForeColor = (AlertCurrentAC) ? ForeColorAlarm : ForeColorNormal; //lbCurrentAC.Text = ObjString(row["current"]); AlertVoltAC = (ObjFloat(row["VG"]) < al.MinVoltAC || ObjFloat(row["VG"]) > al.MaxVoltAC) ? true : false; lbVG.BackColor = (AlertVoltAC) ? BackColorAlarm : BackColorNormal; lbVG.ForeColor = (AlertVoltAC) ? ForeColorAlarm : ForeColorNormal; lbVG.Text = ObjString(row["VG"]); AlertCurrentAC = (ObjFloat(row["IG"]) < al.MinCurrentAC || ObjFloat(row["IG"]) > al.MaxCurrentAC) ? true : false; lbIG.BackColor = (AlertCurrentAC) ? BackColorAlarm : BackColorNormal; lbIG.ForeColor = (AlertCurrentAC) ? ForeColorAlarm : ForeColorNormal; lbIG.Text = ObjString(row["IG"]); lbPG.Text = ObjString(row["PG"]); lbFG.Text = ObjString(row["FG"]); lbDWH.Text = ObjString(row["DWH"]); lbTWH.Text = ObjString(row["TWH"]); lbVIN1.Text = ObjString(row["VIN1"]); lbIIN1.Text = ObjString(row["IIN1"]); lbPIN1.Text = ObjString(row["PIN1"]); lbVIN2.Text = ObjString(row["VIN2"]); lbIIN2.Text = ObjString(row["IIN2"]); lbPIN2.Text = ObjString(row["PIN2"]); lbDate.Text = ObjString(row["Rectime"]); } /* * row = dataManager.RetriveNowData("90"); * if (row != null) * { * lbTemp1.BackColor = (AlertVoltPoly1) ? BackColorAlarm : BackColorNormal; * lbTemp1.ForeColor = (AlertVoltPoly1) ? ForeColorAlarm : ForeColorNormal; * lbTemp1.Text = ObjString(row["temperature1"]); * * AlertVoltPoly1 = (ObjFloat(row["temperature2"]) < al.MinVoltPoly1 || ObjFloat(row["temperature2"]) > al.MaxVoltPoly1) ? true : false; * lbTemp2.BackColor = (AlertVoltPoly1) ? BackColorAlarm : BackColorNormal; * lbTemp2.ForeColor = (AlertVoltPoly1) ? ForeColorAlarm : ForeColorNormal; * lbTemp2.Text = ObjString(row["temperature2"]); * * AlertCurrentPoly1 = (ObjFloat(row["humid1"]) < al.MinCurrentPoly1 || ObjFloat(row["humid1"]) > al.MaxCurrentPoly1) ? true : false; * lbHumid1.BackColor = (AlertCurrentPoly1) ? BackColorAlarm : BackColorNormal; * lbHumid1.ForeColor = (AlertCurrentPoly1) ? ForeColorAlarm : ForeColorNormal; * lbHumid1.Text = ObjString(row["humid1"]); * * lbIrr1.Text = ObjString(row["irr1"]); * if (ObjString(row["control_code"]) != "0") errorPvd.SetError(lbTemp2, "Error: " + ObjString(row["remark"])); * else errorPvd.SetError(lbTemp2, ""); * } * * row = dataManager.RetriveNowData("10"); * if (row != null) * { * * AlertPowerAC = (ObjFloat(row["power"]) < al.MinPowerAC || ObjFloat(row["power"]) > al.MaxPowerAC) ? true : false; * lbPowerAC.BackColor = (AlertPowerAC) ? BackColorAlarm : BackColorNormal; * lbPowerAC.ForeColor = (AlertPowerAC) ? ForeColorAlarm : ForeColorNormal; * lbPowerAC.Text = ObjString(row["power"]); * * AlertVoltAC = (ObjFloat(row["voltage"]) < al.MinVoltAC || ObjFloat(row["voltage"]) > al.MaxVoltAC) ? true : false; * lbVoltAC.BackColor = (AlertVoltAC) ? BackColorAlarm : BackColorNormal; * lbVoltAC.ForeColor = (AlertVoltAC) ? ForeColorAlarm : ForeColorNormal; * lbVoltAC.Text = ObjString(row["voltage"]); * * AlertCurrentAC = (ObjFloat(row["current"]) < al.MinCurrentAC || ObjFloat(row["current"]) > al.MaxCurrentAC) ? true : false; * lbCurrentAC.BackColor = (AlertCurrentAC) ? BackColorAlarm : BackColorNormal; * lbCurrentAC.ForeColor = (AlertCurrentAC) ? ForeColorAlarm : ForeColorNormal; * lbCurrentAC.Text = ObjString(row["current"]); * * lbPF.Text = ObjString(row["pf"]); * lbFrequency.Text = ObjString(row["frequency"]); * * * if (ObjString(row["control_code"]) != "0") errorPvd.SetError(lbVoltAC, "Error: " + ObjString(row["remark"])); * else errorPvd.SetError(lbVoltAC, ""); * * lbDate.Text = "data update: " + ObjDateTime(row["create_date"]).ToString("d/MM/yyyy H:mm"); * * } * row = dataManager.RetriveNowData("11"); * if (row != null) * { * * AlertPowerAC = (ObjFloat(row["power"]) < al.MinPowerAC || ObjFloat(row["power"]) > al.MaxPowerAC) ? true : false; * lbPower2.BackColor = (AlertPowerAC) ? BackColorAlarm : BackColorNormal; * lbPower2.ForeColor = (AlertPowerAC) ? ForeColorAlarm : ForeColorNormal; * lbPower2.Text = ObjString(row["power"]); * * AlertVoltAC = (ObjFloat(row["voltage"]) < al.MinVoltAC || ObjFloat(row["voltage"]) > al.MaxVoltAC) ? true : false; * lbVolt2.BackColor = (AlertVoltAC) ? BackColorAlarm : BackColorNormal; * lbVolt2.ForeColor = (AlertVoltAC) ? ForeColorAlarm : ForeColorNormal; * lbVolt2.Text = ObjString(row["voltage"]); * * AlertCurrentAC = (ObjFloat(row["current"]) < al.MinCurrentAC || ObjFloat(row["current"]) > al.MaxCurrentAC) ? true : false; * lbAmp2.BackColor = (AlertCurrentAC) ? BackColorAlarm : BackColorNormal; * lbAmp2.ForeColor = (AlertCurrentAC) ? ForeColorAlarm : ForeColorNormal; * lbAmp2.Text = ObjString(row["current"]); * * lbPF2.Text = ObjString(row["pf"]); * lbFreq2.Text = ObjString(row["frequency"]); * * if (ObjString(row["control_code"]) != "0") errorPvd.SetError(lbVolt2, "Error: " + ObjString(row["remark"])); * else errorPvd.SetError(lbVoltAC, ""); * * } * * * row = dataManager.RetriveNowData("12"); * if (row != null) * { * * AlertPowerAC = (ObjFloat(row["power"]) < al.MinPowerAC || ObjFloat(row["power"]) > al.MaxPowerAC) ? true : false; * lbPower3.BackColor = (AlertPowerAC) ? BackColorAlarm : BackColorNormal; * lbPower3.ForeColor = (AlertPowerAC) ? ForeColorAlarm : ForeColorNormal; * lbPower3.Text = ObjString(row["power"]); * * AlertVoltAC = (ObjFloat(row["voltage"]) < al.MinVoltAC || ObjFloat(row["voltage"]) > al.MaxVoltAC) ? true : false; * lbVolt3.BackColor = (AlertVoltAC) ? BackColorAlarm : BackColorNormal; * lbVolt3.ForeColor = (AlertVoltAC) ? ForeColorAlarm : ForeColorNormal; * lbVolt3.Text = ObjString(row["voltage"]); * * AlertCurrentAC = (ObjFloat(row["current"]) < al.MinCurrentAC || ObjFloat(row["current"]) > al.MaxCurrentAC) ? true : false; * lbAmp3.BackColor = (AlertCurrentAC) ? BackColorAlarm : BackColorNormal; * lbAmp3.ForeColor = (AlertCurrentAC) ? ForeColorAlarm : ForeColorNormal; * lbAmp3.Text = ObjString(row["current"]); * * lbPF3.Text = ObjString(row["pf"]); * lbFreq3.Text = ObjString(row["frequency"]); * * if (ObjString(row["control_code"]) != "0") errorPvd.SetError(lbVolt3, "Error: " + ObjString(row["remark"])); * else errorPvd.SetError(lbVoltAC, ""); * * } */ } catch (Exception ex) { DataTimer.Stop(); MessageBox.Show("Error Loading!!" + ex.Message, "มีข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Error); DataTimer.Start(); //throw (ex); } }
/// <summary> /// Initiates the synchronization of source and target databases by cycling /// through a DataSyncActionsCollection and executing the script member /// of each DataSyncAction object. /// </summary> /// <returns> /// True - synchronized /// True - SyncActionsCollection.Count == 0, because CompareForSync() not called. /// False - exceptions encountered /// </returns> protected override bool SyncInternal() { Exceptions.Clear(); if (DataSyncActionsCollection.Count == 0) { return(true); } var scripts = Script(); if (scripts.Count == 0) { return(true); } var start = new TimeSpan(DateTime.Now.Ticks); DataTimer.RaiseTimerStatusEvent( string.Format("Connecting to database with connection name [{0}]", TargetDataConnectionInfo.Name)); var random = new Random(); var transactionNumber = random.Next(); var transactionName = string.Format("IdioSyncracy{0}", transactionNumber); using (var sqlConnection = new SqlConnection(TargetDataConnectionInfo.ConnectionString)) { sqlConnection.Open(); var finish = new TimeSpan(DateTime.Now.Ticks); var interval = finish.Subtract(start); DataTimer.RaiseTimerStatusEvent(interval, "Database connection established."); if (!TargetDataConnectionInfo.IsAcceptableVersion(sqlConnection)) { TargetDataConnectionInfo.ThrowVersionException(); } var sqlCommand = sqlConnection.CreateCommand(); var sqlTransaction = sqlConnection.BeginTransaction(transactionName); sqlCommand.Connection = sqlConnection; sqlCommand.Transaction = sqlTransaction; sqlCommand.Parameters.Add("@ReturnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue; try { foreach (var script in scripts) { sqlCommand.CommandText = script; var rowsAffected = sqlCommand.ExecuteNonQuery(); if (rowsAffected == -1) { continue; } var exception = new Exception("The following query failed to execute: " + sqlCommand.CommandText); Exceptions.Add(exception); sqlTransaction.Rollback(transactionName); return(false); } sqlTransaction.Commit(); finish = new TimeSpan(DateTime.Now.Ticks); interval = finish.Subtract(start); DataTimer.RaiseTimerStatusEvent(interval, "SQL Transaction commited successfully."); sqlConnection.Close(); return(true); } catch (Exception ex1) { Exceptions.Add(ex1); try { sqlTransaction.Rollback(transactionName); sqlConnection.Close(); } catch (Exception ex2) { // This catch block will handle any errors that may have occurred // on the server that would cause the rollback to fail, such as // a closed connection. Exceptions.Add(ex2); } return(false); } } }
//public bool FetchTargetDataModelFromJson(string json) //{ // var ticks = DateTime.Now.Ticks; // TotalDataEventWaitTime = new TimeSpan(ticks); // TotalDataEventWaitTime = TotalDataEventWaitTime.Subtract(TotalDataEventWaitTime); // var start = new TimeSpan(ticks); // DataTimer.RaiseTimerStatusEvent("Fetching target database JSon metadata."); // Clear(); // try // { // if (string.IsNullOrEmpty(json) || string.IsNullOrWhiteSpace(json)) // { // Exceptions.Add(new Exception( // "Target metadeta could not be pulled from JSon.")); // return false; // } // var server = Server.FromJson(json); // if (server == null) // { // Exceptions.Add(new Exception( // "Target metadeta could not be pulled from JSon.")); // return false; // } // TargetServer = server; // if (DataProperties.CatalogsToCompare.Count > 0) // foreach (var catalogValue in // DataProperties.CatalogsToCompare.Values.Where( // catalogValue => !TargetServer.Catalogs.ContainsKey(catalogValue) // )) // Server.RemoveCatalog(TargetServer, catalogValue); // } // catch (Exception ex) // { // Exceptions.Add(ex); // return false; // } // var finish = new TimeSpan(DateTime.Now.Ticks); // var interval = finish.Subtract(start); // interval = interval.Subtract(TotalDataEventWaitTime); // DataTimer.RaiseTimerStatusEvent(interval, "Finished fetching target database JSon metadata."); // if (TotalDataEventWaitTime.Ticks > 0) // DataTimer.RaiseTimerStatusEvent(TotalDataEventWaitTime, "Total user response time in dialog windows."); // return true; //} public bool FetchTargetDataModelFromServer(bool closeDataConnectionAfterUse = true) { if (TargetDataConnectionInfo == null) { Exceptions.Add(new Exception("Target connection info has not been provided.")); return(false); } var ticks = DateTime.Now.Ticks; TotalDataEventWaitTime = new TimeSpan(ticks); TotalDataEventWaitTime = TotalDataEventWaitTime.Subtract(TotalDataEventWaitTime); var start = new TimeSpan(ticks); DataTimer.RaiseTimerStatusEvent("Fetching target database metadata."); Clear(); // Open target data connection if it does not already exist and should exist. if (TargetDataConnectionManager == null) { var targetStart = new TimeSpan(DateTime.Now.Ticks); DataTimer.RaiseTimerStatusEvent(string.Format("Creating and opening connection for target server: [{0}]", TargetDataConnectionInfo.Name)); TargetDataConnectionManager = new DataConnectionManager(TargetDataConnectionInfo); TargetDataConnectionManager.Open(); var targetFinish = new TimeSpan(DateTime.Now.Ticks); var targetInterval = targetFinish.Subtract(targetStart); DataTimer.RaiseTimerStatusEvent( targetInterval, string.Format("Finished creating and opening connection for target server: [{0}]", TargetDataConnectionInfo.Name)); } else if (!TargetDataConnectionManager.IsOpen()) { if (TargetDataConnectionManager.IsBusy()) { Exceptions.Add(new Exception( string.Format("Target connection for server: [{0}]... is busy! Please try again in a few moments.", TargetDataConnectionInfo.Name) )); return(false); } var targetStart = new TimeSpan(DateTime.Now.Ticks); DataTimer.RaiseTimerStatusEvent( string.Format("Opening connection for target connection: [{0}]", TargetDataConnectionInfo.Name)); TargetDataConnectionManager.Open(); var targetFinish = new TimeSpan(DateTime.Now.Ticks); var targetInterval = targetFinish.Subtract(targetStart); DataTimer.RaiseTimerStatusEvent( targetInterval, string.Format("Finished opening connection for target server: [{0}]", TargetDataConnectionInfo.Name)); } TargetServer = null; DataSyncComparer = null; if (!TargetDataConnectionManager.IsOpen()) { Exceptions.Add(new Exception( string.Format("Connection for target server: [{0}]... could not be opened.", TargetDataConnectionInfo.Name))); return(false); } var targetServerStart = new TimeSpan(DateTime.Now.Ticks); DataTimer.RaiseTimerStatusEvent( string.Format("Creating and pulling data objects for target connection [{0}]", TargetDataConnectionInfo.Name)); TargetServer = new Server { ObjectName = TargetDataConnectionInfo.Name, DataContext = TargetDataConnectionInfo.DataContext }; Server.BuildCatalogs(TargetServer, TargetDataConnectionManager, closeDataConnectionAfterUse); var targetServerFinish = new TimeSpan(DateTime.Now.Ticks); var targetServerInterval = targetServerFinish.Subtract(targetServerStart); DataTimer.RaiseTimerStatusEvent( targetServerInterval, string.Format( "Finished creating data objects for target connection [{0}]", TargetDataConnectionInfo.Name)); var finish = new TimeSpan(DateTime.Now.Ticks); var interval = finish.Subtract(start); interval = interval.Subtract(TotalDataEventWaitTime); DataTimer.RaiseTimerStatusEvent(interval, "Finished fetching target database metadata."); if (TotalDataEventWaitTime.Ticks > 0) { DataTimer.RaiseTimerStatusEvent(TotalDataEventWaitTime, "Total user response time in dialog windows."); } return(true); }