Files
DP44/DataPRO/DbAPI/DAS/DataRecorders.cs

637 lines
32 KiB
C#
Raw Permalink Normal View History

2026-04-17 14:55:32 -04:00
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();
}
}
}
}