init
This commit is contained in:
@@ -0,0 +1,267 @@
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
|
||||
namespace DatabaseImport
|
||||
{
|
||||
public class SensorsCollection : INotifyPropertyChanged
|
||||
{
|
||||
private readonly SensorData[] _cachedSensors = new SensorData[0];
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
protected bool SetProperty<T>(ref T storage, T value, string propertyName = null)
|
||||
{
|
||||
if (Equals(storage, value)) return false;
|
||||
|
||||
storage = value;
|
||||
OnPropertyChanged(propertyName);
|
||||
return true;
|
||||
}
|
||||
|
||||
private volatile bool _hookedup = true;
|
||||
|
||||
public bool HookedUp
|
||||
{
|
||||
get => _hookedup;
|
||||
set
|
||||
{
|
||||
_hookedup = value;
|
||||
OnPropertyChanged("AllSensors");
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnPropertyChanged(string propertyName = null)
|
||||
{
|
||||
if (!HookedUp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
|
||||
private static readonly object Lock = new object();
|
||||
|
||||
public void Reload()
|
||||
{
|
||||
}
|
||||
|
||||
private static SensorsCollection _sensorCollection;
|
||||
|
||||
public static SensorsCollection SensorsList
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (Lock)
|
||||
{
|
||||
return _sensorCollection ?? (_sensorCollection = new SensorsCollection());
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// deletes all sensors
|
||||
/// originally created so TDM imports could clear all tables except DAS tables.
|
||||
/// </summary>
|
||||
public void DeleteAll()
|
||||
{
|
||||
lock (Lock)
|
||||
{
|
||||
using (var cmd = DbOperations.GetSQLCommand(true))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.CommandType = CommandType.StoredProcedure;
|
||||
cmd.CommandText = DbOperationsEnum.StoredProcedure.sp_SensorDeleteAll.ToString(); //Only used in DataPROPre20.mdf, not DataPRO.mdf
|
||||
|
||||
#region params
|
||||
|
||||
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);
|
||||
|
||||
#endregion params
|
||||
|
||||
cmd.ExecuteNonQuery();
|
||||
if (int.Parse(errorNumberParam.Value.ToString()) != 0)
|
||||
{
|
||||
//errorMessageParam.Value
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
cmd.Connection.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
//OnSensorsChanged?.Invoke(_sensorCollection.AllSensors.ToArray(), true);
|
||||
|
||||
SensorCalibrationList.DeleteAll();
|
||||
OnPropertyChanged("AllSensors");
|
||||
}
|
||||
}
|
||||
public SensorData GetSensorBySerialNumber(string serialNumber, bool excludeBroken = true, bool bUseCache = true)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(serialNumber))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
try
|
||||
{
|
||||
if (bUseCache)
|
||||
{
|
||||
var matches = from s in _cachedSensors where s.SerialNumber == serialNumber select s;
|
||||
if (matches.Any())
|
||||
{
|
||||
return matches.First();
|
||||
}
|
||||
}
|
||||
using (var cmd = DbOperations.GetSQLCommand(true))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.CommandType = CommandType.StoredProcedure;
|
||||
cmd.CommandText = DbOperationsEnum.StoredProcedure.sp_SensorsAnalogGet.ToString();
|
||||
|
||||
#region params
|
||||
|
||||
cmd.Parameters.Add(new SqlParameter("@sensorID", SqlDbType.Int) { Value = null });
|
||||
cmd.Parameters.Add(
|
||||
new SqlParameter("@SerialNumber", SqlDbType.NVarChar) { Value = serialNumber });
|
||||
|
||||
#endregion
|
||||
|
||||
var reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
{
|
||||
var sd = new SensorData(reader);
|
||||
reader.Close();
|
||||
cmd.Connection.Dispose();
|
||||
return sd;
|
||||
}
|
||||
reader.Close();
|
||||
}
|
||||
finally { cmd.Connection.Dispose(); }
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//APILogger.Log("Failed to load Sensor: ", ex);
|
||||
}
|
||||
try
|
||||
{
|
||||
using (var cmd = DbOperations.GetSQLCommand(true))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.CommandType = CommandType.StoredProcedure;
|
||||
cmd.CommandText = DbOperationsEnum.StoredProcedure.sp_SensorsDigitalInGet.ToString();
|
||||
cmd.Parameters.Add(
|
||||
new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
|
||||
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 50) { Value = null });
|
||||
var reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
{
|
||||
try
|
||||
{
|
||||
var di = new DigitalInputSetting(reader);
|
||||
reader.Close();
|
||||
return di;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//APILogger.Log(ex);
|
||||
}
|
||||
}
|
||||
reader.Close();
|
||||
}
|
||||
finally { cmd.Connection.Dispose(); }
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//APILogger.Log(ex);
|
||||
}
|
||||
try
|
||||
{
|
||||
using (var cmd = DbOperations.GetSQLCommand(true))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.CommandType = CommandType.StoredProcedure;
|
||||
cmd.CommandText = DbOperationsEnum.StoredProcedure.sp_SensorsSquibGet.ToString();
|
||||
cmd.Parameters.Add(
|
||||
new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
|
||||
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.NVarChar, 50) { Value = null });
|
||||
var reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
{
|
||||
try
|
||||
{
|
||||
var squib = new SquibSetting(reader);
|
||||
reader.Close();
|
||||
return squib;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//APILogger.Log(ex);
|
||||
}
|
||||
}
|
||||
reader.Close();
|
||||
}
|
||||
finally { cmd.Connection.Dispose(); }
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//APILogger.Log(ex);
|
||||
}
|
||||
try
|
||||
{
|
||||
using (var cmd = DbOperations.GetSQLCommand(true))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.CommandType = CommandType.StoredProcedure;
|
||||
cmd.CommandText = DbOperationsEnum.StoredProcedure.sp_SensorsDigitalOutGet.ToString();
|
||||
cmd.Parameters.Add(
|
||||
new SqlParameter("@SerialNumber", SqlDbType.NVarChar) { Value = serialNumber });
|
||||
|
||||
var reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
{
|
||||
try
|
||||
{
|
||||
var dout = new DigitalOutputSetting(reader);
|
||||
reader.Close();
|
||||
return dout;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//APILogger.Log(ex);
|
||||
}
|
||||
}
|
||||
reader.Close();
|
||||
}
|
||||
finally { cmd.Connection.Dispose(); }
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//APILogger.Log(ex);
|
||||
}
|
||||
if (SensorData.IsTestSpecificDigitalOutSN(serialNumber))
|
||||
{
|
||||
return new DigitalOutputSetting { SerialNumber = serialNumber };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user