/// <summary> /// Saves <see cref="CalculatedMeasurement"/> information to database. /// </summary> /// <param name="database"><see cref="AdoDataConnection"/> to connection to database.</param> /// <param name="calculatedMeasurement">Information about <see cref="CalculatedMeasurement"/>.</param> /// <returns>String, for display use, indicating success.</returns> public static string Save(AdoDataConnection database, CalculatedMeasurement calculatedMeasurement) { bool createdConnection = false; string query; try { createdConnection = CreateConnection(ref database); if (calculatedMeasurement.ID == 0) { query = database.ParameterizedQueryString("INSERT INTO CalculatedMeasurement (NodeID, Acronym, Name, AssemblyName, TypeName, ConnectionString, " + "ConfigSection, InputMeasurements, OutputMeasurements, MinimumMeasurementsToUse, FramesPerSecond, LagTime, LeadTime, UseLocalClockAsRealTime, " + "AllowSortsByArrival, LoadOrder, Enabled, IgnoreBadTimeStamps, TimeResolution, AllowPreemptivePublishing, DownsamplingMethod, " + "PerformTimeReasonabilityCheck, UpdatedBy, UpdatedOn, CreatedBy, CreatedOn) Values ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, " + "{9}, {10}, {11}, {12}, {13}, {14}, {15}, {16}, {17}, {18}, {19}, {20}, {21}, {22}, {23}, {24}, {25})", "nodeID", "acronym", "name", "assemblyName", "typeName", "connectionString", "configSection", "inputMeasurements", "outputMeasurements", "minimumMeasurementsToUse", "framesPerSecond", "lagTime", "leadTime", "useLocalClockAsRealTime", "allowSortsByArrival", "loadOrder", "enabled", "ignoreBadTimeStamps", "timeResolution", "allowPreemptivePublishing", "downsamplingMethod", "performTimeReasonabilityCheck", "updatedBy", "updatedOn", "createdBy", "createdOn"); database.Connection.ExecuteNonQuery(query, DefaultTimeout, database.CurrentNodeID(), calculatedMeasurement.Acronym.Replace(" ", "").ToUpper(), calculatedMeasurement.Name.ToNotNull(), calculatedMeasurement.AssemblyName, calculatedMeasurement.TypeName, calculatedMeasurement.ConnectionString.ToNotNull(), calculatedMeasurement.ConfigSection.ToNotNull(), calculatedMeasurement.InputMeasurements.ToNotNull(), calculatedMeasurement.OutputMeasurements.ToNotNull(), calculatedMeasurement.MinimumMeasurementsToUse, calculatedMeasurement.FramesPerSecond, calculatedMeasurement.LagTime, calculatedMeasurement.LeadTime, database.Bool(calculatedMeasurement.UseLocalClockAsRealTime), database.Bool(calculatedMeasurement.AllowSortsByArrival), calculatedMeasurement.LoadOrder, database.Bool(calculatedMeasurement.Enabled), database.Bool(calculatedMeasurement.IgnoreBadTimeStamps), calculatedMeasurement.TimeResolution, database.Bool(calculatedMeasurement.AllowPreemptivePublishing), calculatedMeasurement.DownsamplingMethod, database.Bool(calculatedMeasurement.PerformTimestampReasonabilityCheck), CommonFunctions.CurrentUser, database.UtcNow, CommonFunctions.CurrentUser, database.UtcNow); } else { query = database.ParameterizedQueryString("UPDATE CalculatedMeasurement SET NodeID = {0}, Acronym = {1}, Name = {2}, AssemblyName = {3}, " + "TypeName = {4}, ConnectionString = {5}, ConfigSection = {6}, InputMeasurements = {7}, OutputMeasurements = {8}, MinimumMeasurementsToUse = {9}, " + "FramesPerSecond = {10}, LagTime = {11}, LeadTime = {12}, UseLocalClockAsRealTime = {13}, AllowSortsByArrival = {14}, LoadOrder = {15}, " + "Enabled = {16}, IgnoreBadTimeStamps = {17}, TimeResolution = {18}, AllowPreemptivePublishing = {19}, DownsamplingMethod = {20}, " + "PerformTimeReasonabilityCheck = {21}, UpdatedBy = {22}, UpdatedOn = {23} WHERE ID = {24}", "nodeID", "acronym", "name", "assemblyName", "typeName", "connectionString", "configSection", "inputMeasurements", "outputMeasurements", "minimumMeasurementsToUse", "framesPerSecond", "lagTime", "leadTime", "useLocalClockAsRealTime", "allowSortsByArrival", "loadOrder", "enabled", "ignoreBadTimeStamps", "timeResolution", "allowPreemptivePublishing", "downsamplingMethod", "performTimeReasonabilityCheck", "updatedBy", "updatedOn", "id"); database.Connection.ExecuteNonQuery(query, DefaultTimeout, database.Guid(calculatedMeasurement.NodeID), calculatedMeasurement.Acronym.Replace(" ", "").ToUpper(), calculatedMeasurement.Name.ToNotNull(), calculatedMeasurement.AssemblyName, calculatedMeasurement.TypeName, calculatedMeasurement.ConnectionString.ToNotNull(), calculatedMeasurement.ConfigSection.ToNotNull(), calculatedMeasurement.InputMeasurements.ToNotNull(), calculatedMeasurement.OutputMeasurements.ToNotNull(), calculatedMeasurement.MinimumMeasurementsToUse, calculatedMeasurement.FramesPerSecond, calculatedMeasurement.LagTime, calculatedMeasurement.LeadTime, database.Bool(calculatedMeasurement.UseLocalClockAsRealTime), database.Bool(calculatedMeasurement.AllowSortsByArrival), calculatedMeasurement.LoadOrder, database.Bool(calculatedMeasurement.Enabled), database.Bool(calculatedMeasurement.IgnoreBadTimeStamps), calculatedMeasurement.TimeResolution, database.Bool(calculatedMeasurement.AllowPreemptivePublishing), calculatedMeasurement.DownsamplingMethod, database.Bool(calculatedMeasurement.PerformTimestampReasonabilityCheck), CommonFunctions.CurrentUser, database.UtcNow, calculatedMeasurement.ID); } return("Calculated measurement information saved successfully"); } finally { if (createdConnection && database != null) { database.Dispose(); } } }
/// <summary> /// Loads <see cref="CalculatedMeasurement"/> information as an <see cref="ObservableCollection{T}"/> style list. /// </summary> /// <param name="database"><see cref="AdoDataConnection"/> to connection to database.</param> /// <param name="keys"> Keys of the measurement to be loaded from the database</param> /// <returns>Collection of <see cref="CalculatedMeasurement"/>.</returns> public static ObservableCollection <CalculatedMeasurement> Load(AdoDataConnection database, IList <int> keys) { bool createdConnection = false; try { createdConnection = CreateConnection(ref database); string query; string commaSeparatedKeys; CalculatedMeasurement[] calculatedMeasurementList = null; DataTable calculatedMeasurementTable; int id; if ((object)keys != null && keys.Count > 0) { commaSeparatedKeys = keys.Select(key => key.ToString()).Aggregate((str1, str2) => str1 + "," + str2); query = string.Format("SELECT NodeID, ID, Acronym, Name, AssemblyName, " + "TypeName, ConnectionString, ConfigSection, InputMeasurements, OutputMeasurements, MinimumMeasurementsToUse, FramesPerSecond, LagTime, " + "LeadTime, UseLocalClockAsRealTime, AllowSortsByArrival, LoadOrder, Enabled, IgnoreBadTimeStamps, TimeResolution, AllowPreemptivePublishing, " + "DownSamplingMethod, NodeName, PerformTimeReasonabilityCheck From CalculatedMeasurementDetail WHERE ID IN ({0}) AND NodeID = '{1}'", commaSeparatedKeys, database.CurrentNodeID()); calculatedMeasurementTable = database.Connection.RetrieveData(database.AdapterType, query); calculatedMeasurementList = new CalculatedMeasurement[calculatedMeasurementTable.Rows.Count]; foreach (DataRow row in calculatedMeasurementTable.Rows) { id = row.ConvertField <int>("ID"); calculatedMeasurementList[keys.IndexOf(id)] = new CalculatedMeasurement() { NodeID = database.Guid(row, "NodeID"), ID = id, Acronym = row.Field <string>("Acronym"), Name = row.Field <string>("Name"), AssemblyName = row.Field <string>("AssemblyName"), TypeName = row.Field <string>("TypeName"), ConnectionString = row.Field <string>("ConnectionString"), ConfigSection = row.Field <string>("ConfigSection"), InputMeasurements = row.Field <string>("InputMeasurements"), OutputMeasurements = row.Field <string>("OutputMeasurements"), MinimumMeasurementsToUse = row.ConvertField <int>("MinimumMeasurementsToUse"), FramesPerSecond = Convert.ToInt32(row.Field <object>("FramesPerSecond") ?? 30), LagTime = row.ConvertField <double>("LagTime"), LeadTime = row.ConvertField <double>("LeadTime"), UseLocalClockAsRealTime = Convert.ToBoolean(row.Field <object>("UseLocalClockAsRealTime")), AllowSortsByArrival = Convert.ToBoolean(row.Field <object>("AllowSortsByArrival")), LoadOrder = row.ConvertField <int>("LoadOrder"), Enabled = Convert.ToBoolean(row.Field <object>("Enabled")), IgnoreBadTimeStamps = Convert.ToBoolean(row.Field <object>("IgnoreBadTimeStamps")), TimeResolution = Convert.ToInt32(row.Field <object>("TimeResolution")), AllowPreemptivePublishing = Convert.ToBoolean(row.Field <object>("AllowPreemptivePublishing")), DownsamplingMethod = row.Field <string>("DownSamplingMethod"), m_nodeName = row.Field <string>("NodeName"), PerformTimestampReasonabilityCheck = Convert.ToBoolean(row.Field <object>("PerformTimeReasonabilityCheck")) }; } } return(new ObservableCollection <CalculatedMeasurement>(calculatedMeasurementList ?? new CalculatedMeasurement[0])); } finally { if (createdConnection && database != null) { database.Dispose(); } } }