using DbAPI.Connections;
using DbAPI.Errors;
using DbAPI.Logging;
using DTS.Common.Classes.Sensors;
using DTS.Common.Classes.Sensors.AnalogDiagnostics;
using DTS.Common.Interface.Database;
using DTS.Common.Interface.Sensors;
using DTS.Common.Interface.Sensors.AnalogDiagnostics;
using DTS.Common.Utilities.Logging;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using DTS.Common;
namespace DbAPI.Sensors
{
///
/// Handles sensor functions
///
///
internal class Sensors : ISensors
{
private const int DB_VERSION_TRACK_DIAGNOSTICS = 98;
///
/// returns all matching analog diagnostic records
///
/// user making query
/// connection being queried over
/// id of record, or null for all records
/// id of diagnostic run, or null for all records
/// sensor id to query for, or null for all
/// serial number to query for, or null for all
///
public ulong SensorsAnalogDiagnosticsGet(IUserDbRecord user, IConnectionDetails connection,
long? Id, long? diagnosticRunId, int? sensorId, string sensorSerialNumber, out IDiagnosticEntry[] records)
{
records = new IDiagnosticEntry[0];
var list = new List();
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (connection.ConnectionDbVersion < DB_VERSION_TRACK_DIAGNOSTICS) { return ErrorCodes.ERROR_NOT_SUPPORTED; }
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_AnalogDiagnosticsGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
AddNullableBigIntParameter(cmd, "@Id", Id);
AddNullableBigIntParameter(cmd, "@DiagnosticRunId", diagnosticRunId);
AddNullableIntParameter(cmd, "@SensorId", sensorId);
AddNullableStringParameter(cmd, "@SensorSerialNumber", sensorSerialNumber);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new DiagnosticEntry(reader));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_AnalogDiagnosticsGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves any matching
///
/// user making query
/// diagnostic run id to query for or null for any id
/// test setup id to query for or null for any id
/// test setup name to query for or null for any name
/// connection to query on
/// out records
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsAnalogDiagnosticRunGet(IUserDbRecord user, IConnectionDetails connection,
long? Id, int? testId, string testName, out IDiagnosticRun[] records)
{
records = new IDiagnosticRun[0];
var list = new List();
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (connection.ConnectionDbVersion < DB_VERSION_TRACK_DIAGNOSTICS) { return ErrorCodes.ERROR_NOT_SUPPORTED; }
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DiagnosticRunsGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
AddNullableBigIntParameter(cmd, "@Id", Id);
AddNullableIntParameter(cmd, "@TestId", testId);
AddNullableStringParameter(cmd, "@TestName", testName);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new DiagnosticRun(reader));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_DiagnosticRunsGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// adds an error number style parameter to command object (int output parameter)
///
///
///
///
private void AddErrorNumberParameter(SqlCommand cmd, string paramName, out SqlParameter errorNumberParam)
{
errorNumberParam =
new SqlParameter(paramName, SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
}
///
/// adds an error message style parameter to command object (nvarchar 250 output parameter)
///
///
///
///
private void AddErrorMessageParameter(SqlCommand cmd, string paramName, out SqlParameter errorMessageParam)
{
errorMessageParam =
new SqlParameter(paramName, SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
}
///
/// adds a nullable double parameter to command object
/// if input value is null or NaN, then DBNull is used
///
///
///
///
private void AddNullableDoubleParameter(SqlCommand cmd, string paramName, double? dValue)
{
var cParam = new SqlParameter(paramName, SqlDbType.Float);
if (null == dValue || double.IsNaN((double)dValue)) { cParam.Value = DBNull.Value; }
else { cParam.Value = (double)dValue; }
cmd.Parameters.Add(cParam);
}
///
/// adds a nullable int parameter to the command object
///
///
///
///
private void AddNullableIntParameter(SqlCommand cmd, string paramName, int? dValue)
{
var cParam = new SqlParameter(paramName, SqlDbType.Int);
if (null == dValue) { cParam.Value = DBNull.Value; }
else { cParam.Value = (int)dValue; }
cmd.Parameters.Add(cParam);
}
///
/// adds a nullable string parameter to the command object
///
///
///
///
private void AddNullableStringParameter(SqlCommand cmd, string paramName, string dValue)
{
var cParam = new SqlParameter(paramName, SqlDbType.NVarChar);
if (string.IsNullOrEmpty(dValue)) { cParam.Value = DBNull.Value; }
else { cParam.Value = dValue; }
cmd.Parameters.Add(cParam);
}
///
/// adds a nullable big int parameter to command object
///
///
///
///
private void AddNullableBigIntParameter(SqlCommand cmd, string paramName, long? dValue)
{
var cParam = new SqlParameter(paramName, SqlDbType.BigInt);
if (null == dValue) { cParam.Value = DBNull.Value; }
else { cParam.Value = (long)dValue; }
cmd.Parameters.Add(cParam);
}
///
/// update or inserts all entries passed in
///
/// user committing entries
/// connection to commit over
/// entries to insert or update
///
public ulong SensorsAnalogDiagnosticUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
ref IDiagnosticEntry entry)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == entry)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (entry.Timestamp < SqlDateTime.MinValue)
{
APILogger.Log("SensorsAnalogDiagnosticUpdateInsert - entry Timestamp is invalid");
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_AnalogDiagnosticsUpdateInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
AddNullableBigIntParameter(cmd, "@Id", entry.Id);
cmd.Parameters.Add(new SqlParameter("@DiagnosticRunId", SqlDbType.BigInt) { Value = entry.DiagnosticRunId });
AddNullableDoubleParameter(cmd, "@Excitation", entry.Excitation);
cmd.Parameters.Add(new SqlParameter("@ExcitationStatus", SqlDbType.SmallInt) { Value = (int)entry.ExcitationStatus });
AddNullableDoubleParameter(cmd, "@Offset", entry.Offset);
cmd.Parameters.Add(new SqlParameter("@OffsetStatus", SqlDbType.SmallInt) { Value = (int)entry.ShuntStatus });
AddNullableDoubleParameter(cmd, "@ActualRange", entry.ActualRange);
cmd.Parameters.Add(new SqlParameter("@ActualRangeStatus", SqlDbType.SmallInt) { Value = (int)entry.ActualRangeStatus });
AddNullableDoubleParameter(cmd, "@Shunt", entry.Shunt);
cmd.Parameters.Add(new SqlParameter("@ShuntStatus", SqlDbType.SmallInt) { Value = (int)entry.ShuntStatus });
AddNullableDoubleParameter(cmd, "@Noise", entry.Noise);
cmd.Parameters.Add(new SqlParameter("@NoiseStatus", SqlDbType.SmallInt) { Value = (int)entry.NoiseStatus });
AddNullableIntParameter(cmd, "@SensorId", entry.SensorId);
cmd.Parameters.Add(new SqlParameter("@SensorSerialNumber", SqlDbType.NVarChar) { Value = entry.SensorSerialNumber });
AddNullableIntParameter(cmd, "@DasId", entry.DASId);
cmd.Parameters.Add(new SqlParameter("@DASSerialNumber", SqlDbType.NVarChar) { Value = entry.DASSerialNumber });
cmd.Parameters.Add(new SqlParameter("@DASChannelIdx", SqlDbType.Int) { Value = entry.DASChannelIdx });
cmd.Parameters.Add(new SqlParameter("@UserCode", SqlDbType.NVarChar) { Value = entry.UserCode });
cmd.Parameters.Add(new SqlParameter("@UserChannelName", SqlDbType.NVarChar) { Value = entry.UserChannelName });
cmd.Parameters.Add(new SqlParameter("@IsoCode", SqlDbType.NVarChar) { Value = entry.IsoCode });
cmd.Parameters.Add(new SqlParameter("@IsoChannelName", SqlDbType.NVarChar) { Value = entry.IsoChannelName });
cmd.Parameters.Add(new SqlParameter("@ScaleFactorMV", SqlDbType.Float) { Value = entry.ScaleFactor });
AddNullableIntParameter(cmd, "@CalibrationRecordId", entry.CalibrationRecordId);
cmd.Parameters.Add(new SqlParameter("@CalibrationRecord", SqlDbType.NVarChar) { Value = entry.CalibrationRecordXML });
cmd.Parameters.Add(new SqlParameter("@Timestamp", SqlDbType.DateTime) { Value = entry.Timestamp });
AddErrorNumberParameter(cmd, "@errorNumber", out var errorNumberParam);
AddErrorMessageParameter(cmd, "@errorMessage", out var errorMessageParam);
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumberParam.Value) && 0 != Convert.ToInt32(errorNumberParam.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_AnalogDiagnosticsUpdateInsert failed, {Convert.ToInt32(errorNumberParam.Value)}, {errorMessageParam.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
if (!DBNull.Value.Equals(newIdParam.Value))
{
entry.Id = Convert.ToInt32(newIdParam.Value);
}
else
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_AnalogDiagnosticsUpdateInsert failed, no new_id returned");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_AnalogDiagnosticsUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// updates or inserts a Diagnostic run into the database
///
/// user committing record
/// connection diagnostic run is being committed over
/// the record to insert or update
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsAnalogDiagnosticRunUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
ref IDiagnosticRun run)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == run)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DiagnosticRunsUpdateInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
AddNullableBigIntParameter(cmd, "@Id", run.Id);
cmd.Parameters.Add(new SqlParameter("@DataPROUser", SqlDbType.NVarChar) { Value = run.DataPROUser });
AddNullableIntParameter(cmd, "@TestId", run.TestId);
cmd.Parameters.Add(new SqlParameter("@TestName", SqlDbType.NVarChar) { Value = run.TestName });
cmd.Parameters.Add(new SqlParameter("@PreTest", SqlDbType.Bit) { Value = run.PreTest });
AddErrorNumberParameter(cmd, "@errorNumber", out var errorNumberParam);
AddErrorMessageParameter(cmd, "@errorMessage", out var errorMessageParam);
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumberParam.Value) && 0 != Convert.ToInt32(errorNumberParam.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_DiagnosticRunsUpdateInsert failed, {Convert.ToInt32(errorNumberParam.Value)}, {errorMessageParam.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
if (!DBNull.Value.Equals(newIdParam.Value))
{
run.Id = Convert.ToInt32(newIdParam.Value);
}
else
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_DiagnosticRunsUpdateInsert failed, no new_id returned");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_DiagnosticRunsUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// updates or inserts an input stream record into the database
/// Database id is modified on record on an insert operation
/// appears to always do an insert currently?
///
/// user committing record
/// connection record is being committed over
/// record to be inserted or updated
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsInputStreamUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
ref IStreamInputRecord record)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == record)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsStreamInputUpdateInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar) { Value = record.SerialNumber });
cmd.Parameters.Add(new SqlParameter("@UDPAddress", SqlDbType.NVarChar) { Value = record.StreamInUDPAddress });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar) { Value = record.LastUpdatedBy });
cmd.Parameters.Add(new SqlParameter("@UserTags", SqlDbType.Binary) { Value = record.TagsBlobBytes });
cmd.Parameters.Add(new SqlParameter("@Broken", SqlDbType.Bit) { Value = record.Broken });
cmd.Parameters.Add(new SqlParameter("@DoNotUse", SqlDbType.Bit) { Value = record.DoNotUse });
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumberParam.Value) && 0 != Convert.ToInt32(errorNumberParam.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsStreamInputUpdateInsert failed, {Convert.ToInt32(errorNumberParam.Value)}, {errorMessageParam.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
if (!DBNull.Value.Equals(newIdParam.Value))
{
record.Id = Convert.ToInt32(newIdParam.Value);
}
else
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsStreamInputUpdateInsert failed, no new_id returned");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsStreamInputUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves matching input streams from database
///
/// user making request
/// connection over which to look for records
/// database id of record (use null for all)
/// serial number of record (use null for all)
/// all matching records
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsInputStreamGet(IUserDbRecord user,
IConnectionDetails connection,
int? Id,
string SerialNumber,
out IStreamInputRecord[] records)
{
records = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsStreamInputGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == Id)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)Id });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = SerialNumber });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
list.Add(new StreamInputRecord(reader));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsStreamInputGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves matching thermocouplers from database
///
/// user making request
/// connection over which to look for records
/// database id of record (use null for all)
/// serial number of record (use null for all)
/// all matching records
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsThermocouplerGet(IUserDbRecord user,
IConnectionDetails connection,
int clientDbVersion,
int? Id,
string SerialNumber,
out IThermocouplerRecord[] records)
{
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
records = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = Database.Database.PrepareForDbAccess(user, connection, connection.ClientDbVersion,
"sp_SensorsThermocouplerGet", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == Id)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)Id });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = SerialNumber });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
list.Add(new ThermocouplerRecord(reader));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsThermocouplerGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// updates or inserts an output stream record into the database
/// Database id is modified on record on an insert operation
/// appears to always do an insert currently?
///
/// user committing record
/// connection record is being committed over
/// record to be inserted or updated
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsOutputStreamUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
ref IStreamOutputRecord record)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == record)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, Database.Database.GetStoredProcedureVersionCached(connection, "sp_SensorsStreamOutputUpdateInsert"));
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar) { Value = record.SerialNumber });
cmd.Parameters.Add(new SqlParameter("@StreamProfile", SqlDbType.NVarChar) { Value = record.StreamOutUDPProfile });
cmd.Parameters.Add(new SqlParameter("@UDPAddress", SqlDbType.NVarChar) { Value = record.StreamOutUDPAddress });
cmd.Parameters.Add(new SqlParameter("@TimeChannelId", SqlDbType.Int) { Value = record.StreamOutUDPTimeChannelId });
cmd.Parameters.Add(new SqlParameter("@DataChannelId", SqlDbType.Int) { Value = record.StreamOutUDPDataChannelId });
cmd.Parameters.Add(new SqlParameter("@TmNSConfig", SqlDbType.NVarChar) { Value = record.StreamOutUDPTmNSConfig });
cmd.Parameters.Add(new SqlParameter("@IRIGTimeDataPacketIntervalMs", SqlDbType.Int) { Value = record.StreamOutIRIGTimeDataPacketIntervalMs });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar) { Value = record.LastUpdatedBy });
cmd.Parameters.Add(new SqlParameter("@UserTags", SqlDbType.Binary) { Value = record.TagsBlobBytes });
cmd.Parameters.Add(new SqlParameter("@Broken", SqlDbType.Bit) { Value = record.Broken });
cmd.Parameters.Add(new SqlParameter("@DoNotUse", SqlDbType.Bit) { Value = record.DoNotUse });
if (connection.ClientDbVersion >= DTS.Common.Constants.TMATS_INTERVAL_VERSION
&& connection.ConnectionDbVersion >= DTS.Common.Constants.TMATS_INTERVAL_VERSION)
{
cmd.Parameters.Add(new SqlParameter("@TMATSIntervalMs", SqlDbType.Int) { Value = record.StreamOutTMATSIntervalMs });
}
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumberParam.Value) && 0 != Convert.ToInt32(errorNumberParam.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsStreamOutputUpdateInsert failed, {Convert.ToInt32(errorNumberParam.Value)}, {errorMessageParam.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
if (!DBNull.Value.Equals(newIdParam.Value))
{
record.Id = Convert.ToInt32(newIdParam.Value);
}
else
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsStreamOutputUpdateInsert failed, no new_id returned");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsStreamOutputUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves matching output streams from database
///
/// user making request
/// connection over which to look for records
/// database id of record (use null for all)
/// serial number of record (use null for all)
/// all matching records
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsOutputStreamGet(IUserDbRecord user,
IConnectionDetails connection,
int? Id,
string SerialNumber,
out IStreamOutputRecord[] records)
{
records = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, Database.Database.GetStoredProcedureVersionCached(connection, "sp_SensorsStreamOutputGet"));
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == Id)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)Id });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = SerialNumber });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
list.Add(new StreamOutputRecord(reader, connection.ClientDbVersion, connection.ConnectionDbVersion));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsStreamOutputGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// updates or inserts a new UART record into the database
/// Id is updated if a new record is inserted
///
/// user committing UART
/// connection UART should be committed on
/// record being inserted or updated
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsUARTUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
ref IUARTRecord record)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == record)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsUARTUpdateInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar) { Value = record.SerialNumber });
cmd.Parameters.Add(new SqlParameter("@BaudRate", SqlDbType.Int) { Value = record.UartBaudRate });
cmd.Parameters.Add(new SqlParameter("@DataBits", SqlDbType.Int) { Value = record.UartDataBits });
cmd.Parameters.Add(new SqlParameter("@StopBits", SqlDbType.NVarChar) { Value = record.UartStopBits });
cmd.Parameters.Add(new SqlParameter("@Parity", SqlDbType.NVarChar) { Value = record.UartParity });
cmd.Parameters.Add(new SqlParameter("@FlowControl", SqlDbType.NVarChar) { Value = record.UartFlowControl });
cmd.Parameters.Add(new SqlParameter("@DataFormat", SqlDbType.NVarChar) { Value = record.UartDataFormat });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar) { Value = record.LastUpdatedBy });
cmd.Parameters.Add(new SqlParameter("@UserTags", SqlDbType.Binary) { Value = record.TagsBlobBytes });
cmd.Parameters.Add(new SqlParameter("@Broken", SqlDbType.Bit) { Value = record.Broken });
cmd.Parameters.Add(new SqlParameter("@DoNotUse", SqlDbType.Bit) { Value = record.DoNotUse });
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumberParam.Value) && 0 != Convert.ToInt32(errorNumberParam.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsUARTUpdateInsert failed, {Convert.ToInt32(errorNumberParam.Value)}, {errorMessageParam.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
if (!DBNull.Value.Equals(newIdParam.Value))
{
record.Id = Convert.ToInt32(newIdParam.Value);
}
else
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsUARTUpdateInsert failed, no new_id returned");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsUARTUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves UART settings
///
/// user making requests
/// connection request sh
/// Id to search for (use null for all)
/// serial number to search for (use null or empty for all)
/// matching records found
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsUARTGet(IUserDbRecord user,
IConnectionDetails connection,
int? Id,
string SerialNumber,
out IUARTRecord[] records)
{
records = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsUARTGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == Id)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)Id });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = SerialNumber });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
list.Add(new UARTRecord(reader));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsUARTGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
public ulong SensorsCanGet(IUserDbRecord user,
IConnectionDetails connection,
int? Id,
string SerialNumber,
out ICANRecord[] records)
{
records = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = DbAPI.GetDatabaseVersion(connection, out int actualDbVersion); if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
if (actualDbVersion < Constants.SLICE_PRO_CAN_FD_DB_VERSION) { return ErrorCodes.ERROR_NOT_SUPPORTED; }
ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsCANGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == Id)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)Id });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = SerialNumber });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
list.Add(new CANRecord(reader));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsCANGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
public ulong SensorsCanUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
ref ICANRecord record)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == record)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = DbAPI.GetDatabaseVersion(connection, out int actualDbVersion); if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
if (actualDbVersion < Constants.SLICE_PRO_CAN_FD_DB_VERSION) { return ErrorCodes.ERROR_NOT_SUPPORTED; }
ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsCanUpdateInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar) { Value = record.SerialNumber });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar) { Value = record.LastUpdatedBy });
cmd.Parameters.Add(new SqlParameter("@UserTags", SqlDbType.Binary) { Value = record.TagsBlobBytes });
cmd.Parameters.Add(new SqlParameter("@Broken", SqlDbType.Bit) { Value = record.Broken });
cmd.Parameters.Add(new SqlParameter("@DoNotUse", SqlDbType.Bit) { Value = record.DoNotUse });
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumberParam.Value) && 0 != Convert.ToInt32(errorNumberParam.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsCanUpdateInsert failed, {Convert.ToInt32(errorNumberParam.Value)}, {errorMessageParam.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
if (!DBNull.Value.Equals(newIdParam.Value))
{
record.Id = Convert.ToInt32(newIdParam.Value);
}
else
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsCanUpdateInsert failed, no new_id returned");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsCanUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// commits a digital output setting to the db
/// The record will be modified with a new database id if
/// a new record is inserted
///
/// user making commit
/// connection over which to commit
/// the record to commit
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsDigitalOutUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
IDigitalOutDbRecord record)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsDigitalOutUpdateInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(
new SqlParameter("@SerialNumber", SqlDbType.NVarChar) { Value = record.SerialNumber });
cmd.Parameters.Add(
new SqlParameter("@DelayMS", SqlDbType.Float) { Value = record.DODelay });
cmd.Parameters.Add(
new SqlParameter("@DurationMSFloat", SqlDbType.Float)
{
Value = record.DODuration
});
cmd.Parameters.Add(
new SqlParameter("@OutputMode", SqlDbType.SmallInt) { Value = (int)record.DOMode });
cmd.Parameters.Add(
new SqlParameter("@LimitDuration", SqlDbType.Bit) { Value = record.LimitDuration });
cmd.Parameters.Add(
new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(
new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar) { Value = record.ModifiedBy });
cmd.Parameters.Add(new SqlParameter("@Version", SqlDbType.Int) { Value = record.Version });
cmd.Parameters.Add(new SqlParameter("@UserTags", SqlDbType.Binary) { Value = record.TagsBlobBytes });
cmd.Parameters.Add(new SqlParameter("@Broken", SqlDbType.Bit) { Value = record.Broken });
cmd.Parameters.Add(new SqlParameter("@DoNotUse", SqlDbType.Bit) { Value = record.DoNotUse });
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumberParam.Value) && 0 != Convert.ToInt32(errorNumberParam.Value))
{
APILogger.Log($"sp_SensorsDigitalOutUpdateInsert failed: {errorMessageParam.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
record.DatabaseId = Convert.ToInt32(newIdParam.Value);
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsDigitalInUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves all matching digital output settings in the db
///
/// user requesting records
/// connection to query records on
/// Database id of records (can be null)
/// serial number/name of setting (can be null)
/// all matching records
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsDigitalOutGet(
IUserDbRecord user,
IConnectionDetails connection,
int? id,
string serialNumber,
out IDigitalOutDbRecord[] records)
{
records = new IDigitalOutDbRecord[0];
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsDigitalOutGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (id is null)
{
cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int) { Value = (int)id });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
var record = new DigitalOutDbRecord(reader);
list.Add(record);
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsDigitalOutGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// inserts or updates a digital input record into the db. If a record is inserted
/// then the original record is updated with the database id of the entry
///
/// user committing record
///
///
///
public ulong SensorsDigitalInUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
IDigitalInDbRecord record)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsDigitalInUpdateInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar) { Value = record.SerialNumber });
cmd.Parameters.Add(new SqlParameter("@SettingMode", SqlDbType.Int) { Value = (int)record.Mode });
cmd.Parameters.Add(new SqlParameter("@ScaleMultiplier", SqlDbType.NVarChar)
{
Value = record.ScaleMultiplier.ToSerializeDbString()
});
cmd.Parameters.Add(new SqlParameter("@IsoCode", SqlDbType.NVarChar, 50) { Value = record.ISOCode });
cmd.Parameters.Add(new SqlParameter("@IsoChannelName", SqlDbType.NVarChar, 255) { Value = record.ISOChannelName });
if (null == record.UserCode) { record.UserCode = string.Empty; }
cmd.Parameters.Add(new SqlParameter("@UserCode", SqlDbType.NVarChar, 50) { Value = record.UserCode });
if (null == record.UserChannelName) { record.UserChannelName = string.Empty; }
cmd.Parameters.Add(new SqlParameter("@UserChannelName", SqlDbType.NVarChar, 255) { Value = record.UserChannelName });
cmd.Parameters.Add(
new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(
new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar) { Value = record.LastModifiedBy });
cmd.Parameters.Add(new SqlParameter("@eId", SqlDbType.NVarChar) { Value = record.EID });
if (null == record.UserValue1) { record.UserValue1 = string.Empty; }
cmd.Parameters.Add(
new SqlParameter("@UserValue1", SqlDbType.NVarChar) { Value = record.UserValue1 });
if (null == record.UserValue2) { record.UserValue2 = string.Empty; }
cmd.Parameters.Add(
new SqlParameter("@UserValue2", SqlDbType.NVarChar) { Value = record.UserValue2 });
if (null == record.UserValue3) { record.UserValue3 = string.Empty; }
cmd.Parameters.Add(
new SqlParameter("@UserValue3", SqlDbType.NVarChar) { Value = record.UserValue3 });
cmd.Parameters.Add(
new SqlParameter("@UserTags", SqlDbType.VarBinary) { Value = record.UserTags });
cmd.Parameters.Add(
new SqlParameter("@MeasurementUnit", SqlDbType.NVarChar) { Value = record.MeasurementUnit });
cmd.Parameters.Add(
new SqlParameter("@FilterClass", SqlDbType.NVarChar) { Value = record.FilterClass.ToString() });
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
cmd.Parameters.Add(new SqlParameter("@Broken", SqlDbType.Bit) { Value = record.Broken });
cmd.Parameters.Add(new SqlParameter("@DoNotUse", SqlDbType.Bit) { Value = record.DoNotUse });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
APILogger.Log($"sp_SensorsDigitalInUpdateInsert failed: {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
record.Id = Convert.ToInt32(newIdParam.Value);
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsDigitalInUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves any digital input settings matching input criteria
/// in the database
///
/// user making request
/// connection to query over
/// Database Id of digital input setting (can be null)
/// serial number of setting (can be null)
/// Electronic id of setting (can be null)
/// all matching records
/// 0 (ERROR_SUCCESS) on success, all other values are errors
public ulong SensorsDigitalInGet(IUserDbRecord user,
IConnectionDetails connection,
int? id,
string serialNumber,
string eId,
out IDigitalInDbRecord[] records)
{
records = new IDigitalInDbRecord[0];
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsDigitalInGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (id is null)
{
cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int) { Value = (int)id });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
cmd.Parameters.Add(new SqlParameter("@EID", SqlDbType.NVarChar, 50) { Value = eId });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
var record = new DigitalInDbRecord(reader);
list.Add(record);
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsDigitalInGet failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// Inserts or updates a squib setting in the db
/// setting is modified with new db id after execution
///
/// user inserting setting
/// connection for inserting
/// record to be inserted
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsSquibUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
ISquibDbRecord record)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsSquibUpdateInsert");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("Id", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("IsoChannelName", SqlDbType.NVarChar, 255) { Value = record.IsoChannelName });
if (null == record.UserCode) { record.UserCode = string.Empty; }
cmd.Parameters.Add(new SqlParameter("UserCode", SqlDbType.NVarChar, 50) { Value = record.UserCode });
if (null == record.UserChannelName) { record.UserChannelName = string.Empty; }
cmd.Parameters.Add(new SqlParameter("UserChannelName", SqlDbType.NVarChar, 255) { Value = record.UserChannelName });
cmd.Parameters.Add(new SqlParameter("Broken", SqlDbType.Bit) { Value = record.Broken });
cmd.Parameters.Add(new SqlParameter("DoNotUse", SqlDbType.Bit) { Value = record.DoNotUse });
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = record.SerialNumber });
cmd.Parameters.Add(new SqlParameter("@BypassCurrentFilter", SqlDbType.Bit) { Value = record.BypassCurrentFilter });
cmd.Parameters.Add(new SqlParameter("@BypassVoltageFilter", SqlDbType.Bit) { Value = record.BypassVoltageFilter });
cmd.Parameters.Add(new SqlParameter("@DelayMS", SqlDbType.Float) { Value = record.DelayMs });
cmd.Parameters.Add(new SqlParameter("@DurationMS", SqlDbType.Float) { Value = record.DurationMs });
cmd.Parameters.Add(new SqlParameter("@FireMode", SqlDbType.SmallInt) { Value = (short)record.FireMode });
cmd.Parameters.Add(new SqlParameter("@IsoCode", SqlDbType.NVarChar, 50) { Value = record.IsoCode });
cmd.Parameters.Add(
new SqlParameter("@MeasurementType", SqlDbType.SmallInt)
{ Value = (short)record.MeasurementType });
cmd.Parameters.Add(new SqlParameter("@SquibOutputCurrent", SqlDbType.Float) { Value = record.SquibOutputCurrent });
cmd.Parameters.Add(new SqlParameter("@SquibToleranceLow", SqlDbType.Float) { Value = record.SquibToleranceLow });
cmd.Parameters.Add(new SqlParameter("@SquibToleranceHigh", SqlDbType.Float) { Value = record.SquibToleranceHigh });
cmd.Parameters.Add(new SqlParameter("@LimitDuration", SqlDbType.Bit) { Value = record.LimitDuration });
cmd.Parameters.Add(new SqlParameter("@DefineDelayInTest", SqlDbType.Bit) { Value = record.DefineDelayInTest });
cmd.Parameters.Add(new SqlParameter("@ArticleId", SqlDbType.NVarChar, 50) { Value = record.ArticleId });
cmd.Parameters.Add(new SqlParameter("@Version", SqlDbType.Int) { Value = record.Version });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar, 50) { Value = record.LastModifiedBy });
if (null == record.UserValue1) { record.UserValue1 = string.Empty; }
cmd.Parameters.Add(new SqlParameter("@UserValue1", SqlDbType.NVarChar, 255) { Value = record.UserValue1 });
if (null == record.UserValue2) { record.UserValue2 = string.Empty; }
cmd.Parameters.Add(new SqlParameter("@UserValue2", SqlDbType.NVarChar, 255) { Value = record.UserValue2 });
if (null == record.UserValue3) { record.UserValue3 = string.Empty; }
cmd.Parameters.Add(new SqlParameter("@UserValue3", SqlDbType.NVarChar, 255) { Value = record.UserValue3 });
cmd.Parameters.Add(new SqlParameter("@UserTags", SqlDbType.VarBinary)
{ Value = record.UserTags });
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
APILogger.Log($"sp_SensorsSquibUpdateInsert failed: {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
record.Id = Convert.ToInt32(newIdParam.Value);
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"sp_SensorsSquibUpdateInsert failed, {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves all squib settings matching input criteria
///
/// user requesting squib settings
/// connection for retrieving squib settings
/// Electronic Id
/// Database Id for squib setting
/// serial number/name of squib setting
/// output records discovered
/// 0 (ERROR_SUCCESS) on success, all other values are errors
public ulong SensorsSquibGet(IUserDbRecord user,
IConnectionDetails connection,
int? Id,
string serialNumber,
string eId,
out ISquibDbRecord[] records)
{
records = new ISquibDbRecord[0];
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsSquibGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (Id is null)
{
cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int) { Value = (int)Id });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
cmd.Parameters.Add(new SqlParameter("@EID", SqlDbType.NVarChar, 50) { Value = eId });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
var squib = new SquibDbRecord(reader);
list.Add(squib);
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// Deletes ALL sensors in the db
///
/// user deleting sensors
/// connection sensors to be deleted on
/// 0 (ERROR_SUCCESS) on success, all other values are errors
public ulong SensorsDeleteAll(IUserDbRecord user,
IConnectionDetails connection)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsDeleteAll");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
APILogger.Log($"sp_SensorsDeleteAll failed: {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves the bridge resistance for a sensor
///
/// user making query
/// connection query is being made on
/// serial number of sensor
/// output bridge resistance of sensor
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsAnalogBridgeResistanceGet(IUserDbRecord user,
IConnectionDetails connection,
string serialNumber,
out double bridgeResistance)
{
bridgeResistance = double.NaN;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsAnalogBridgeResistanceGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@sensorID", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
var bridgeResParam = new SqlParameter("@BridgeResistance", SqlDbType.Float) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(bridgeResParam);
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
APILogger.Log($"sp_SensorsAnalogBridgeResistanceGet failed: {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
if (DBNull.Value.Equals(bridgeResParam.Value))
{
APILogger.Log($"sp_SensorsAnalogBridgeResistanceGet failed: {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
bridgeResistance = Convert.ToDouble(bridgeResParam.Value);
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// deletes all sensor calibrations matching criteria
/// nulls are wild cards, so passing in all nulls will
/// delete all calibrations
///
/// user deleting calibrations
/// connection to use for deletes
/// allows null
/// allows null
/// allows null
/// 0 (ERROR_SUCCESS) on success, all other values are errors
public ulong SensorCalibrationsDelete(IUserDbRecord user,
IConnectionDetails connection,
string sensorSerialNumber,
DateTime? calibrationDate,
DateTime? modifyDate
)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorCalibrationsDelete");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
var list = new List();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@SensorSerialNumber", SqlDbType.NVarChar, 255) { Value = sensorSerialNumber });
if (null == calibrationDate)
{
cmd.Parameters.Add(new SqlParameter("@CalibrationDate", SqlDbType.DateTime) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@CalibrationDate", SqlDbType.DateTime) { Value = (DateTime)calibrationDate }); }
if (null == modifyDate)
{
cmd.Parameters.Add(new SqlParameter("@ModifiedDate", SqlDbType.DateTime) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@ModifiedDate", SqlDbType.DateTime) { Value = (DateTime)modifyDate }); }
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
APILogger.Log($"SensorCalibrationsDelete failed: {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// inserts a new calibration record
///
/// user submitting record
/// connection record is being submitted on
/// calibration record
/// type of sensor
///
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorCalibrationsInsert(IUserDbRecord user,
IConnectionDetails connection,
ISensorCalDbRecord cal,
int sensorType,
bool setCalibrationId)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == cal)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (sensorType < 0) { return ErrorCodes.ERROR_MISSING_PARAMETER; }
SqlCommand cmd;
var ret = Database.Database.PrepareForDbAccess(user, connection, connection.ClientDbVersion,
"sp_SensorCalibrationsInsert", out var storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("Id", SqlDbType.TinyInt) { Value = null });
cmd.Parameters.Add(new SqlParameter("@SensorSerialNumber", SqlDbType.NVarChar, 50) { Value = cal.SerialNumber });
cmd.Parameters.Add(new SqlParameter("@SensorType", SqlDbType.TinyInt) { Value = sensorType });
cmd.Parameters.Add(new SqlParameter("@CalibrationDate", SqlDbType.DateTime)
{
Value = cal.CalibrationDate.Date.ToShortDateString()
});
cmd.Parameters.Add(new SqlParameter("@Username", SqlDbType.NVarChar, 50) { Value = cal.Username ?? "" });
cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = cal.LocalOnly });
cmd.Parameters.Add(new SqlParameter("@NonLinear", SqlDbType.Bit) { Value = cal.NonLinear });
cmd.Parameters.Add(new SqlParameter("@ModifyDate", SqlDbType.DateTime) { Value = cal.ModifyDate });
cmd.Parameters.Add(new SqlParameter("@IsProportional", SqlDbType.Bit) { Value = cal.IsProportional });
cmd.Parameters.Add(new SqlParameter("@RemoveOffset", SqlDbType.Bit) { Value = cal.RemoveOffset });
if (storedProcedureVersionToUse >= DTS.Common.Constants.SENSOR_ASSEMBLY_DB_VERSION)
{
cmd.Parameters.Add(new SqlParameter("@SensitivityInspection", SqlDbType.Int) { Value = cal.SensitivityInspection });
cmd.Parameters.Add(new SqlParameter("@CalibrationNote", SqlDbType.NVarChar, 2048) { Value = cal.CalibrationNote });
cmd.Parameters.Add(new SqlParameter("@UsageCount", SqlDbType.Int) { Value = cal.UsageCount });
}
var zero = cal.ZeroMethods;
if (null == zero) { zero = new ZeroMethods(new ZeroMethod(DTS.Common.Enums.Sensors.ZeroMethodType.None, -.5, -.2)); }
cmd.Parameters.Add(
new SqlParameter("@ZeroMethod", SqlDbType.NVarChar, 255)
{
Value = zero.ToSerializedString()
});
cmd.Parameters.Add(new SqlParameter("@CertificationDocuments", SqlDbType.NVarChar, 2048)
{
Value = string.Join(CultureInfo.InvariantCulture.TextInfo.ListSeparator,
cal.CertificationDocuments.ToArray())
});
var offset = cal.InitialOffsets;
if (null == offset) { offset = new InitialOffsets(new InitialOffset(0)); }
cmd.Parameters.Add(
new SqlParameter("@InitialOffset", SqlDbType.NVarChar)
{
Value = offset.ToSerializedString()
});
cmd.Parameters.Add(
new SqlParameter("@CalibrationRecords", SqlDbType.NVarChar, 255)
{
Value = cal.Records.ToSerializedString(cal)
});
cmd.Parameters.Add(new SqlParameter("@SetLatestCalibrationId", SqlDbType.Bit)
{ Value = setCalibrationId });
var newIdParam =
new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumber =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
APILogger.Log($"SensorsCalibrationsInsert failed: {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
cal.CalibrationId = Convert.ToInt32(newIdParam.Value);
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// deletes all sensors matching criteria
/// sensor types are defined in table SensorsType
/// 0 - analog
/// 1 - digital in
/// 2 - digital out
/// 3 - squib
/// 4 - UART
///
/// user deleting sensors
/// connection sensors are being deleted on
/// id in database
/// type of sensor
/// 0 (ERROR_SUCCESS) on success, all other values are errors
public ulong SensorsDelete(IUserDbRecord user,
IConnectionDetails connection,
int sensorId,
int sensorType)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsDelete");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
var list = new List();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@SensorId", SqlDbType.Int) { Value = sensorId });
cmd.Parameters.Add(new SqlParameter("@SensorType", SqlDbType.Int) { Value = sensorType });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
APILogger.Log($"SensorsDelete failed: {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves all sensor calibrations matching search criteria
///
///
///
///
///
/// null, or calibrations found
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorCalibrationsGet(IUserDbRecord user,
IConnectionDetails connection,
int? sensorId,
string serialNumber,
out ISensorCalDbRecord[] calibrations)
{
calibrations = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = DbAPI.GetDatabaseVersion(connection, out int actualDbVersion);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorCalibrationsGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
var list = new List();
cmd.CommandType = CommandType.StoredProcedure;
if (null != sensorId)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)sensorId });
}
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new SensorCalDbRecord(reader, actualDbVersion));
}
calibrations = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// commits an analog sensor to the db
///
/// DataPRO user making commit
/// connection commit is being made on
/// the record being committed
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsAnalogUpdateInsert(IUserDbRecord user,
IConnectionDetails connection,
IAnalogDbRecord record)
{
if (null == record || string.IsNullOrWhiteSpace(record.SerialNumber))
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
var ret = Database.Database.PrepareForDbAccess(user, connection, connection.ClientDbVersion,
"sp_SensorsAnalogUpdateInsert", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(
new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = record.SerialNumber });
cmd.Parameters.Add(
new SqlParameter("@UserSerialNumber", SqlDbType.NVarChar, 50) { Value = record.UserSerialNumber ?? "" });
cmd.Parameters.Add(
new SqlParameter("@DiagnosticsMode", SqlDbType.Bit) { Value = record.DiagnosticsMode });
cmd.Parameters.Add(
new SqlParameter("@SensorModelId", SqlDbType.Int) { Value = 0 });
if ( null == record.Model) { record.Model = string.Empty; }
cmd.Parameters.Add(new SqlParameter("@Model", SqlDbType.NVarChar, 50) { Value = record.Model });
cmd.Parameters.Add(
new SqlParameter("@Manufacturer", SqlDbType.NVarChar, 50) { Value = record.Manufacturer });
cmd.Parameters.Add(new SqlParameter("@Status", SqlDbType.SmallInt) { Value = (int)record.Status });
cmd.Parameters.Add(
new SqlParameter("@MeasurementUnit", SqlDbType.NVarChar, 50) { Value = record.DisplayUnit });
cmd.Parameters.Add(
new SqlParameter("@OffsetToleranceLow", SqlDbType.Float) { Value = record.OffsetToleranceLow });
cmd.Parameters.Add(
new SqlParameter("@OffsetToleranceHigh", SqlDbType.Float) { Value = record.OffsetToleranceHigh });
cmd.Parameters.Add(new SqlParameter("@eId", SqlDbType.NVarChar, 50) { Value = record.EId ?? "" });
cmd.Parameters.Add(new SqlParameter("@Capacity", SqlDbType.Float) { Value = record.Capacity });
cmd.Parameters.Add(new SqlParameter("@Comment", SqlDbType.NVarChar, 50) { Value = record.Comment ?? "" });
cmd.Parameters.Add(
new SqlParameter("@BridgeType", SqlDbType.SmallInt) { Value = DTS.Common.Enums.Sensors.SensorConstants.ConvertBridgeToInt(record.Bridge) });
cmd.Parameters.Add(
new SqlParameter("@BridgeLegMode", SqlDbType.SmallInt) { Value = record.BridgeLegMode });
cmd.Parameters.Add(new SqlParameter("@Shunt", SqlDbType.SmallInt) { Value = (int)record.Shunt });
cmd.Parameters.Add(new SqlParameter("@Invert", SqlDbType.Bit) { Value = record.Invert });
cmd.Parameters.Add(new SqlParameter("@UserValue1", SqlDbType.NVarChar, 50) { Value = record.UserValue1 ?? "" });
cmd.Parameters.Add(new SqlParameter("@UserValue2", SqlDbType.NVarChar, 50) { Value = record.UserValue2 ?? "" });
cmd.Parameters.Add(new SqlParameter("@UserValue3", SqlDbType.NVarChar, 50) { Value = record.UserValue3 ?? "" });
var filter = record.Filter;
if (null == filter) { filter = new FilterClass(DTS.Common.Enums.Sensors.FilterClassType.None); }
cmd.Parameters.Add(
new SqlParameter("@FilterClass", SqlDbType.NVarChar, 50) { Value = filter.ToString() });
cmd.Parameters.Add(
new SqlParameter("@BridgeResistance", SqlDbType.Float) { Value = record.BridgeResistance });
//these parameters are required not null, if they are null in the commit just use string.empty
//http://manuscript.dts.local/f/cases/38044/EQX-doesn-t-import-sensors-and-doesn-t-say-it-didn-t-import-sensors
cmd.Parameters.Add(new SqlParameter("@IsoCode", SqlDbType.NVarChar, 50) { Value = record.ISOCode ?? string.Empty });
cmd.Parameters.Add(new SqlParameter("@IsoChannelName", SqlDbType.NVarChar, 255) { Value = record.ISOChannelName ?? string.Empty });
cmd.Parameters.Add(new SqlParameter("@UserCode", SqlDbType.NVarChar, 50) { Value = record.UserCode ?? string.Empty });
cmd.Parameters.Add(new SqlParameter("@UserChannelName", SqlDbType.NVarChar, 255) { Value = record.UserChannelName ?? string.Empty });
cmd.Parameters.Add(new SqlParameter("@CheckOffset", SqlDbType.Bit) { Value = record.CheckOffset });
cmd.Parameters.Add(new SqlParameter("@SupportedExcitation", SqlDbType.NVarChar, 50)
{
Value = string.Join(CultureInfo.InvariantCulture.TextInfo.ListSeparator,
record.SupportedExcitation.Select(e => e.ToString()).ToArray())
});
var initialEU = 0D;
if (null != record.InitialEu)
{
initialEU = (double)record.InitialEu;
}
cmd.Parameters.Add(new SqlParameter("@InitialEU", SqlDbType.Float) { Value = initialEU });
cmd.Parameters.Add(new SqlParameter("@CalInterval", SqlDbType.Int) { Value = record.CalInterval });
cmd.Parameters.Add(new SqlParameter("@CalibrationSignal", SqlDbType.Bit) { Value = record.CalibrationSignal });
cmd.Parameters.Add(
new SqlParameter("@InternalShuntResistance", SqlDbType.Float)
{
Value = record.InternalShuntResistance
});
cmd.Parameters.Add(
new SqlParameter("@ExternalShuntResistance", SqlDbType.Float)
{
Value = record.ExternalShuntResistance
});
cmd.Parameters.Add(new SqlParameter("@UniPolar", SqlDbType.Bit) { Value = record.UniPolar });
cmd.Parameters.Add(new SqlParameter("@RangeLow", SqlDbType.Float) { Value = record.RangeLow });
cmd.Parameters.Add(new SqlParameter("@RangeAve", SqlDbType.Float) { Value = record.RangeMedium });
cmd.Parameters.Add(new SqlParameter("@RangeHigh", SqlDbType.Float) { Value = record.RangeHigh });
var created = record.Created;
if (created < SqlDateTime.MinValue.Value) { created = SqlDateTime.MinValue.Value; }
if (created > SqlDateTime.MaxValue.Value) { created = SqlDateTime.MaxValue.Value; }
cmd.Parameters.Add(new SqlParameter("@Created", SqlDbType.DateTime) { Value = created });
cmd.Parameters.Add(new SqlParameter("@TimesUsed", SqlDbType.BigInt) { Value = record.TimesUsed });
cmd.Parameters.Add(new SqlParameter("@SensorCategory", SqlDbType.Int) { Value = record.SensorCategory });
cmd.Parameters.Add(new SqlParameter("@BypassFilter", SqlDbType.Bit) { Value = record.BypassFilter });
cmd.Parameters.Add(new SqlParameter("@CouplingMode", SqlDbType.SmallInt) { Value = (int)record.CouplingMode });
cmd.Parameters.Add(new SqlParameter("@Version", SqlDbType.Int) { Value = record.Version });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = record.LastModified });
cmd.Parameters.Add(
new SqlParameter("@ModifiedBy", SqlDbType.NVarChar, 50) { Value = record.ModifiedBy });
cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = record.LocalOnly });
cmd.Parameters.Add(new SqlParameter("@AxisNumber", SqlDbType.SmallInt) { Value = record.AxisNumber });
cmd.Parameters.Add(new SqlParameter("@NumberOfAxes", SqlDbType.SmallInt) { Value = record.NumberOfAxes });
cmd.Parameters.Add(new SqlParameter("@UserTags", SqlDbType.VarBinary) { Value = record.TagsBlobBytes });
cmd.Parameters.Add(new SqlParameter("@DoNotUse", SqlDbType.Bit) { Value = record.DoNotUse });
cmd.Parameters.Add(new SqlParameter("@Broken", SqlDbType.Bit) { Value = record.Broken });
object o = DBNull.Value;
if (null != record.FirstUseDate) { o = (DateTime)record.FirstUseDate; }
cmd.Parameters.Add(new SqlParameter("@FirstUseDate", SqlDbType.DateTime) { Value = o });
cmd.Parameters.Add(new SqlParameter("@LatestCalibrationId", SqlDbType.Int) { Value = DBNull.Value });
cmd.Parameters.Add(new SqlParameter("@ACCouplingModeEnabled", SqlDbType.Bit) { Value = record.ACCouplingModeEnabled });
if (storedProcedureVersionToUse >= DTS.Common.Constants.SENSOR_ASSEMBLY_DB_VERSION)
{
cmd.Parameters.Add(new SqlParameter("@SensitivityTolerancePercent", SqlDbType.Float) { Value = record.SensitivityTolerancePercent });
cmd.Parameters.Add(new SqlParameter("@AssemblyName", SqlDbType.NVarChar, 50) { Value = record.AssemblyName });
cmd.Parameters.Add(new SqlParameter("@UsageCount", SqlDbType.Int) { Value = record.UsageCount });
cmd.Parameters.Add(new SqlParameter("@MaximumUsage", SqlDbType.Int) { Value = record.MaximumUsage });
}
var newIdParam = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newIdParam);
var errorNumberParam =
new SqlParameter("@errorNumber", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumberParam);
var errorMessageParam =
new SqlParameter("@errorMessage", SqlDbType.NVarChar, 250)
{
Direction = ParameterDirection.Output
};
cmd.Parameters.Add(errorMessageParam);
cmd.ExecuteNonQuery();
if (int.Parse(errorNumberParam.Value.ToString()) != 0)
{
APILogger.Log($"SensorsAnalogUpdateInsert failed: {errorMessageParam.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
record.Id = Convert.ToInt32(newIdParam.Value);
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves all analog sensors matching search criteria
///
/// user querying sensors
/// connection is using
/// sensor database id (allows null)
/// sensor serial number (allows null)
/// electronic Id (DALLAS or TEDS id value)
/// any sensors matching criteria
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsAnalogGet(IUserDbRecord user,
IConnectionDetails connection,
int? sensorId,
string serialNumber,
string eId,
out IAnalogDbRecord[] sensors)
{
sensors = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = DbAPI.GetDatabaseVersion(connection, out int actualDbVersion);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsAnalogGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
var list = new List();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = sensorId });
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
cmd.Parameters.Add(new SqlParameter("@EID", SqlDbType.NVarChar, 50) { Value = eId });
var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new AnalogDbRecord(reader, actualDbVersion));
}
sensors = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
///
/// retrieves all analog sensors matching search criteria
///
/// user querying sensors
/// connection is using
/// sensor serial number (allows null)
/// any sensors matching criteria
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong SensorsGet(IUserDbRecord user,
IConnectionDetails connection,
string serialNumber,
out ISensorDbRecord[] sensors)
{
sensors = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_SensorsGet");
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
var list = new List();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new SensorDbRecord(reader));
}
sensors = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, ex.Message);
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
public ulong UpdateAssemblySensorUsageCount(IUserDbRecord user,
IConnectionDetails connection,
string assemblyName,
int newUsageCount)
{
if (string.IsNullOrWhiteSpace(assemblyName) || newUsageCount == 0)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
var ret = Database.Database.PrepareForDbAccess(user, connection, connection.ClientDbVersion,
"sp_SensorsAnalogAssemblyUsageCountUpdate", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@AssemblyName", SqlDbType.NVarChar, 50) { Value = assemblyName });
cmd.Parameters.Add(new SqlParameter("@UsageCount", SqlDbType.Int) { Value = newUsageCount });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int)
{ Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255)
{ Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && Convert.ToInt32(errorNumber.Value) != 0)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"Error number in {cmd.CommandText} = {errorNumber.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
finally
{
cmd.Connection.Dispose();
}
return ErrorCodes.ERROR_SUCCESS;
}
public ulong UpdateSensorUsageCount(IUserDbRecord user,
IConnectionDetails connection,
ISensorData sd)
{
if (null == sd || sd.DatabaseId == 0 || string.IsNullOrWhiteSpace(sd.DatabaseId.ToString()))
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
var ret = Database.Database.PrepareForDbAccess(user, connection, connection.ClientDbVersion,
"sp_SensorsAnalogUsageCountUpdate", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@SensorId", SqlDbType.Int) { Value = sd.DatabaseId });
cmd.Parameters.Add(new SqlParameter("@UsageCount", SqlDbType.Int) { Value = sd.UsageCount });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int)
{ Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255)
{ Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && Convert.ToInt32(errorNumber.Value) != 0)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"Error number in {cmd.CommandText} = {errorNumber.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
finally
{
cmd.Connection.Dispose();
}
return ErrorCodes.ERROR_SUCCESS;
}
public ulong UpdateSensorCalibrationUsageCount(IUserDbRecord user,
IConnectionDetails connection,
int sensorId,
int sensorCalibrationId,
int newUsageCount)
{
if (string.IsNullOrWhiteSpace(sensorCalibrationId.ToString()) || (sensorCalibrationId <= 0))
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
var ret = Database.Database.PrepareForDbAccess(user, connection, connection.ClientDbVersion,
"sp_SensorCalibrationsUsageCountUpdate", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@SensorId", SqlDbType.Int) { Value = sensorId });
cmd.Parameters.Add(new SqlParameter("@SensorCalibrationId", SqlDbType.Int) { Value = sensorCalibrationId });
cmd.Parameters.Add(new SqlParameter("@UsageCount", SqlDbType.Int) { Value = newUsageCount });
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int)
{ Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorNumber);
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255)
{ Direction = ParameterDirection.Output };
cmd.Parameters.Add(errorMessage);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && Convert.ToInt32(errorNumber.Value) != 0)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Sensors, $"Error number in {cmd.CommandText} = {errorNumber.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
}
finally
{
cmd.Connection.Dispose();
}
return ErrorCodes.ERROR_SUCCESS;
}
}
}