637 lines
32 KiB
C#
637 lines
32 KiB
C#
using DbAPI.Connections;
|
|
using DbAPI.Errors;
|
|
using DbAPI.Logging;
|
|
using DTS.Common.Classes.Hardware;
|
|
using DTS.Common.Interface.DataRecorders;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using DTS.Common.Interface.Database;
|
|
using System.Data.SqlClient;
|
|
using DTS.Common.Enums.DASFactory;
|
|
using DTS.Common.Classes;
|
|
using DTS.Common.Enums.Hardware;
|
|
|
|
namespace DbAPI.DAS
|
|
{
|
|
/// <summary>
|
|
/// No need to export, this is just an internal implementation of the <see cref="IDataRecorders"/> interface
|
|
/// <inheritdoc cref="IDataRecorders"/>
|
|
/// </summary>
|
|
internal class DataRecorders : IDataRecorders
|
|
{
|
|
/// <summary>
|
|
/// Deletes all channels related to DAS
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="connection"></param>
|
|
/// <param name="hardwareId"></param>
|
|
/// <returns>0 on success, all other values are errors</returns>
|
|
public ulong DASChannelsDelete(IUserDbRecord user, IConnectionDetails connection,
|
|
string hardwareId)
|
|
{
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DASChannelsDelete");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
try
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
cmd.Parameters.Add(new SqlParameter("@HardwareId", SqlDbType.NVarChar, 50) { Value = hardwareId });
|
|
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)
|
|
{
|
|
var error = Convert.ToInt32(errorNumberParam.Value);
|
|
var msg = Convert.ToString(errorMessageParam.Value);
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, $"Failed DASChannelsDelete {error} - {msg}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message);
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// inserts das channel record into db. modifies record by updating id after insert
|
|
/// </summary>
|
|
/// <param name="user">user making insert</param>
|
|
/// <param name="connection">connection channel is being inserted on</param>
|
|
/// <param name="hardwareId">string identifier for hardware (serialnumber_dastype)</param>
|
|
/// <param name="record">record being inserted</param>
|
|
/// <returns>0 (ERROR_SUCCESS) on success, all other values are errors</returns>
|
|
public ulong DASChannelsInsert(IUserDbRecord user, IConnectionDetails connection,
|
|
string hardwareId,
|
|
ref IDASChannelDBRecord record)
|
|
{
|
|
if (null == record)
|
|
{
|
|
return ErrorCodes.ERROR_MISSING_PARAMETER;
|
|
}
|
|
if (string.IsNullOrWhiteSpace(hardwareId))
|
|
{
|
|
return ErrorCodes.ERROR_MISSING_PARAMETER;
|
|
}
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DASChannelsInsert");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
|
|
try
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
|
|
#region params
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@HardwareId", SqlDbType.NVarChar, 50) { Value = hardwareId });
|
|
cmd.Parameters.Add(new SqlParameter("@ChannelIdx", SqlDbType.Int) { Value = record.ChannelIdx });
|
|
cmd.Parameters.Add(new SqlParameter("@SupportedBridges", SqlDbType.Int) { Value = record.SupportedBridges });
|
|
cmd.Parameters.Add(new SqlParameter("@SupportedExcitations", SqlDbType.Int) { Value = record.SupportedExcitations });
|
|
cmd.Parameters.Add(new SqlParameter("@DASDisplayOrder", SqlDbType.Int) { Value = record.DASDisplayOrder });
|
|
cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Int) { Value = record.LocalOnly });
|
|
cmd.Parameters.Add(new SqlParameter("@SupportedDigitalInputModes", SqlDbType.Int)
|
|
{
|
|
Value = record.SupportedDigitalInputModes
|
|
});
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@SupportedSquibFireModes", SqlDbType.Int) { Value = record.SupportedSquibFireModes });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@SupportedDigitalOutputModes", SqlDbType.Int)
|
|
{
|
|
Value = record.SupportedDigitalOutputModes
|
|
});
|
|
cmd.Parameters.Add(new SqlParameter("@ModuleSerialNumber", SqlDbType.NVarChar, 16) { Value = record.ModuleSerialNumber });
|
|
cmd.Parameters.Add(new SqlParameter("@ModuleArrayIndex", SqlDbType.Int) { Value = record.ModuleArrayIndex });
|
|
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);
|
|
|
|
#endregion params
|
|
|
|
cmd.ExecuteNonQuery();
|
|
if (int.Parse(errorNumberParam.Value.ToString()) != 0)
|
|
{
|
|
var error = Convert.ToInt32(errorNumberParam.Value);
|
|
var msg = Convert.ToString(errorMessageParam.Value);
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, $"Failed DASChannelsInsert {error} - {msg}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
record.DaschannelId = Convert.ToInt32(newIdParam.Value);
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message);
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// returns DASChannels for given DAS
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="connection"></param>
|
|
/// <param name="hardwareId">string identifying hardware in the form of DASSerial_DASType
|
|
/// (or null for all records)</param>
|
|
/// <param name="channels"></param>
|
|
/// <returns>0 (ERROR_SUCCESS) on success, all other values are errors</returns>
|
|
public ulong DASChannelsGet(IUserDbRecord user, IConnectionDetails connection, string hardwareId, out IDASChannelDBRecord[] channels)
|
|
{
|
|
channels = new IDASChannelDBRecord[0];
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DASChannelsGet");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
try
|
|
{
|
|
var list = new List<IDASChannelDBRecord>();
|
|
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@HardwareId", SqlDbType.NVarChar, 50) { Value = hardwareId });
|
|
|
|
var reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
{
|
|
list.Add(new DASChannelDBRecord(reader));
|
|
}
|
|
|
|
channels = list.ToArray();
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message);
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// returns all the DAS serials associated with a given parent DAS
|
|
/// used for discovering which das are associated with a das in the db for encapsulated/compacted DAS
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="connection"></param>
|
|
/// <param name="dasSerialNumber"></param>
|
|
/// <param name="childrenSerialNumbers"></param>
|
|
/// <returns>0 on success, all other values are errors</returns>
|
|
public ulong DASChildrenGet(IUserDbRecord user, IConnectionDetails connection, string dasSerialNumber, out string[] childrenSerialNumbers)
|
|
{
|
|
childrenSerialNumbers = new string[0];
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DASChildrenGet");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
try
|
|
{
|
|
var serials = new List<string>();
|
|
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@ParentSerialNumber", SqlDbType.NVarChar) { Value = dasSerialNumber });
|
|
|
|
using (var reader = cmd.ExecuteReader())
|
|
{
|
|
while (reader.Read())
|
|
{
|
|
var serial = Utility.GetString(reader, "SerialNumber", string.Empty);
|
|
if (!string.IsNullOrWhiteSpace(serial)) { serials.Add(serial); }
|
|
}
|
|
}
|
|
|
|
childrenSerialNumbers = serials.ToArray();
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message);
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
public ulong DASDelete(IUserDbRecord user, IConnectionDetails connection, int DASId, string serialNumber, bool embedded)
|
|
{
|
|
if (DASId <= 0 && string.IsNullOrEmpty(serialNumber))
|
|
{
|
|
return ErrorCodes.ERROR_MISSING_PARAMETER;
|
|
}
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DASDelete");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
Console.WriteLine($"DASDelete executing sp");
|
|
try
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = DASId });
|
|
cmd.Parameters.Add(new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = serialNumber });
|
|
cmd.Parameters.Add(new SqlParameter("@Embedded", SqlDbType.Bit) { Value = embedded });
|
|
|
|
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))
|
|
{
|
|
var error = Convert.ToInt32(errorNumber.Value);
|
|
var msg = Convert.ToString(errorMessage.Value);
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, $"DeleteDAS failed error: {error} - {msg}");
|
|
Console.WriteLine($"DASDelete {error} - {msg}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message);
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
public ulong DASUpdate(IUserDbRecord user, IConnectionDetails connection, IDASDBRecord das)
|
|
{
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DASUpdate");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
|
|
try
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
|
|
#region params
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = 0 });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = das.SerialNumber });
|
|
cmd.Parameters.Add(new SqlParameter("@Type", SqlDbType.Int) { Value = das.DASType });
|
|
cmd.Parameters.Add(new SqlParameter("@MaxModules", SqlDbType.Int) { Value = das.MaxModules });
|
|
cmd.Parameters.Add(new SqlParameter("@MaxMemory", SqlDbType.BigInt) { Value = das.MaxMemory });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@MaxSampleRate", SqlDbType.Float)
|
|
{
|
|
Value = Convert.ToDecimal(das.MaxSampleRate)
|
|
});
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@MinSampleRate", SqlDbType.Float)
|
|
{
|
|
Value = Convert.ToDecimal(das.MinSampleRate)
|
|
});
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@FirmwareVersion", SqlDbType.NVarChar, 50) { Value = das.FirmwareVersion });
|
|
cmd.Parameters.Add(new SqlParameter("@CalDate", SqlDbType.DateTime) { Value = das.CalDate });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@ProtocolVersion", SqlDbType.Int) { Value = das.ProtocolVersion });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = das.LastModified });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar, 50) { Value = das.LastModifiedBy });
|
|
cmd.Parameters.Add(new SqlParameter("@Version", SqlDbType.Int) { Value = das.Version });
|
|
cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = das.LocalOnly });
|
|
cmd.Parameters.Add(new SqlParameter("@LastUsed", SqlDbType.DateTime) { Value = das.LastUsed });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@LastUsedBy", SqlDbType.NVarChar, 50) { Value = das.LastUsedBy });
|
|
cmd.Parameters.Add(new SqlParameter("@Connection", SqlDbType.NVarChar, 50) { Value = das.Connection });
|
|
cmd.Parameters.Add(new SqlParameter("@Channels", SqlDbType.Int) { Value = das.Channels });
|
|
cmd.Parameters.Add(new SqlParameter("@Position", SqlDbType.NVarChar, 50) { Value = das.Position });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@ChannelTypes", SqlDbType.NVarChar, 255)
|
|
{
|
|
Value = string.Join(",", das.ChannelTypes)
|
|
});
|
|
cmd.Parameters.Add(new SqlParameter("@Reprogramable", SqlDbType.Bit) { Value = das.IsProgrammable });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@Reconfigurable", SqlDbType.Bit) { Value = das.IsReconfigurable });
|
|
cmd.Parameters.Add(new SqlParameter("@IsModule", SqlDbType.Bit) { Value = das.IsModule });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@PositionOnDistributor", SqlDbType.SmallInt)
|
|
{
|
|
Value = das.PositionOnDistributor
|
|
});
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@PositionOnChain", SqlDbType.SmallInt) { Value = das.PositionOnChain });
|
|
cmd.Parameters.Add(new SqlParameter("@Port", SqlDbType.SmallInt) { Value = das.Port });
|
|
cmd.Parameters.Add(new SqlParameter("@ParentDAS", SqlDbType.NVarChar, 50) { Value = null == das.ParentDAS ? string.Empty : das.ParentDAS });
|
|
if (das.IsFirstUseValid)
|
|
{
|
|
if (null == das.FirstUseDate)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@FirstUseDate", SqlDbType.DateTime)
|
|
{ Value = DFConstantsAndEnums.FIRST_USE_DATE_NOT_SET });
|
|
}
|
|
else
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@FirstUseDate", SqlDbType.DateTime)
|
|
{ Value = (DateTime)das.FirstUseDate });
|
|
}
|
|
}
|
|
else { cmd.Parameters.Add(new SqlParameter("@FirstUseDate", SqlDbType.DateTime) { Value = DBNull.Value }); }
|
|
|
|
//to avoid confusion, if it's not a stand in it's also not test/group specific
|
|
if (null == das.TestId || !das.StandIn)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@TestId", SqlDbType.Int) { Value = DBNull.Value });
|
|
}
|
|
else
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@TestId", SqlDbType.Int) { Value = (int)das.TestId });
|
|
}
|
|
|
|
if (null == das.GroupId || !das.StandIn)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = DBNull.Value });
|
|
}
|
|
else
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = (int)das.GroupId });
|
|
}
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@StandIn", SqlDbType.Bit) { Value = das.StandIn });
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@MaxAAFRate", SqlDbType.Float) { Value = Convert.ToDecimal(das.MaxAAFRate) });
|
|
|
|
SqlParameter newIdParam = null;
|
|
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);
|
|
|
|
#endregion params
|
|
|
|
cmd.ExecuteNonQuery();
|
|
|
|
if (int.Parse(errorNumberParam.Value.ToString()) != 0)
|
|
{
|
|
throw new Exception((string)errorMessageParam.Value);
|
|
}
|
|
das.DASId = Convert.ToInt32(newIdParam.Value);
|
|
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message);
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Inserts a DAS record into the db
|
|
/// the DASId will be modified before return if insert is successful
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="connection"></param>
|
|
/// <param name="das"></param>
|
|
/// <param name="iDASId">id of das in Db after insert</param>
|
|
/// <returns>0 (ERROR_SUCCESS) on success, all other values are errors
|
|
/// returns ERROR_NOACCESS if user is not logged in</returns>
|
|
public ulong DASInsert(IUserDbRecord user, IConnectionDetails connection, IDASDBRecord das)
|
|
{
|
|
if (null == das)
|
|
{
|
|
return ErrorCodes.ERROR_MISSING_PARAMETER;
|
|
}
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
|
|
var ret = DbAPI.GetDatabaseVersion(connection, out int serverDbVersion);
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
|
|
//If we discover DAS that is too new for the version of database being used, don't insert it.
|
|
if ((das.DASType == (int)HardwareTypes.SLICE6_AIR_TC) && (serverDbVersion < DTS.Common.Constants.SLICE_TC_DB_VERSION)) { return ErrorCodes.ERROR_UNKNOWN; }
|
|
|
|
ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_DASInsert");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
|
|
try
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
|
|
#region params
|
|
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@SerialNumber", SqlDbType.NVarChar, 50) { Value = das.SerialNumber });
|
|
cmd.Parameters.Add(new SqlParameter("@Type", SqlDbType.Int) { Value = das.DASType });
|
|
cmd.Parameters.Add(new SqlParameter("@MaxModules", SqlDbType.Int) { Value = das.MaxModules });
|
|
cmd.Parameters.Add(new SqlParameter("@MaxMemory", SqlDbType.BigInt) { Value = das.MaxMemory });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@MaxSampleRate", SqlDbType.Float) { Value = Convert.ToDecimal(das.MaxSampleRate) });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@MinSampleRate", SqlDbType.Float) { Value = Convert.ToDecimal(das.MinSampleRate) });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@FirmwareVersion", SqlDbType.NVarChar, 50) { Value = das.FirmwareVersion });
|
|
cmd.Parameters.Add(new SqlParameter("@CalDate", SqlDbType.DateTime) { Value = das.CalDate });
|
|
cmd.Parameters.Add(new SqlParameter("@ProtocolVersion", SqlDbType.Int) { Value = das.ProtocolVersion });
|
|
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = das.LastModified });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar, 50) { Value = das.LastModifiedBy });
|
|
cmd.Parameters.Add(new SqlParameter("@Version", SqlDbType.Int) { Value = das.Version });
|
|
cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = das.LocalOnly });
|
|
cmd.Parameters.Add(new SqlParameter("@LastUsed", SqlDbType.DateTime) { Value = das.LastUsed });
|
|
cmd.Parameters.Add(new SqlParameter("@LastUsedBy", SqlDbType.NVarChar, 50) { Value = null == das.LastUsedBy ? string.Empty : das.LastUsedBy });
|
|
cmd.Parameters.Add(new SqlParameter("@Connection", SqlDbType.NVarChar, 50) { Value = das.Connection });
|
|
cmd.Parameters.Add(new SqlParameter("@Channels", SqlDbType.Int) { Value = das.Channels });
|
|
cmd.Parameters.Add(new SqlParameter("@Position", SqlDbType.NVarChar, 50) { Value = null == das.Position ? string.Empty : das.Position });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@ChannelTypes", SqlDbType.NVarChar, 255)
|
|
{
|
|
Value = null == das.ChannelTypes ? "" : string.Join(",", das.ChannelTypes)
|
|
});
|
|
cmd.Parameters.Add(new SqlParameter("@Reprogramable", SqlDbType.Bit) { Value = das.IsProgrammable });
|
|
cmd.Parameters.Add(new SqlParameter("@Reconfigurable", SqlDbType.Bit) { Value = das.IsReconfigurable });
|
|
cmd.Parameters.Add(new SqlParameter("@IsModule", SqlDbType.Bit) { Value = das.IsModule });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@PositionOnDistributor", SqlDbType.SmallInt) { Value = das.PositionOnDistributor });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@PositionOnChain", SqlDbType.SmallInt) { Value = das.PositionOnChain });
|
|
cmd.Parameters.Add(new SqlParameter("@Port", SqlDbType.SmallInt) { Value = das.Port });
|
|
cmd.Parameters.Add(new SqlParameter("@ParentDAS", SqlDbType.NVarChar, 50) { Value = null == das.ParentDAS ? string.Empty : das.ParentDAS });
|
|
if (das.IsFirstUseValid)
|
|
{
|
|
if (null == das.FirstUseDate)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@FirstUseDate", SqlDbType.DateTime)
|
|
{ Value = DFConstantsAndEnums.FIRST_USE_DATE_NOT_SET });
|
|
}
|
|
else
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@FirstUseDate", SqlDbType.DateTime)
|
|
{ Value = (DateTime)das.FirstUseDate });
|
|
}
|
|
}
|
|
else { cmd.Parameters.Add(new SqlParameter("@FirstUseDate", SqlDbType.DateTime) { Value = DBNull.Value }); }
|
|
|
|
//only standin das are allowed to be test/group specific
|
|
if (null == das.TestId || !das.StandIn)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@TestId", SqlDbType.Int) { Value = DBNull.Value });
|
|
}
|
|
else
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@TestId", SqlDbType.Int) { Value = das.TestId });
|
|
}
|
|
|
|
if (null == das.GroupId || !das.StandIn)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = DBNull.Value });
|
|
}
|
|
else
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = das.GroupId });
|
|
}
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@StandIn", SqlDbType.Bit) { Value = das.StandIn });
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@MaxAAFRate", SqlDbType.Float) { Value = Convert.ToDecimal(das.MaxAAFRate) });
|
|
|
|
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);
|
|
|
|
#endregion params
|
|
|
|
cmd.ExecuteNonQuery();
|
|
if (int.Parse(errorNumberParam.Value.ToString()) != 0)
|
|
{
|
|
throw new Exception((string)errorMessageParam.Value);
|
|
}
|
|
|
|
das.DASId = Convert.ToInt32(newIdParam.Value);
|
|
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message);
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// returns the DAS requested. If no DASId or serial number is specified, returns all DAS
|
|
/// user must be logged in
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="connection"></param>
|
|
/// <param name="DASId">null is allowed, specify an ID or leave null</param>
|
|
/// <param name="DASSerial">null and empty string allowed, specify a serial number or leave null</param>
|
|
/// <param name="das">das found, can be null or empty</param>
|
|
/// <returns></returns>
|
|
public ulong DASGet(IUserDbRecord user, IConnectionDetails connection, int clientDbVersion, string DASSerial, string position, out IDASDBRecord[] das)
|
|
{
|
|
das = null;
|
|
var allDAS = new List<IDASDBRecord>();
|
|
var storedProcedureVersionToUse = 0;
|
|
SqlCommand cmd;
|
|
|
|
var ret = Database.Database.PrepareForDbAccess(user, connection, clientDbVersion, "sp_DASGet", 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 = DASSerial });
|
|
cmd.Parameters.Add(new SqlParameter("@Position", SqlDbType.NVarChar, 10) { Value = position });
|
|
|
|
var reader = cmd.ExecuteReader();
|
|
|
|
while (reader.Read())
|
|
{
|
|
allDAS.Add(new DASDBRecord(reader));
|
|
}
|
|
reader.Close();
|
|
das = allDAS.ToArray();
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.DataRecorders, ex.Message);
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|