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 { /// /// No need to export, this is just an internal implementation of the interface /// /// internal class DataRecorders : IDataRecorders { /// /// Deletes all channels related to DAS /// /// /// /// /// 0 on success, all other values are errors 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(); } } /// /// inserts das channel record into db. modifies record by updating id after insert /// /// user making insert /// connection channel is being inserted on /// string identifier for hardware (serialnumber_dastype) /// record being inserted /// 0 (ERROR_SUCCESS) on success, all other values are errors 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(); } } /// /// returns DASChannels for given DAS /// /// /// /// string identifying hardware in the form of DASSerial_DASType /// (or null for all records) /// /// 0 (ERROR_SUCCESS) on success, all other values are errors 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(); 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(); } } /// /// 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 /// /// /// /// /// /// 0 on success, all other values are errors 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(); 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(); } } /// /// Inserts a DAS record into the db /// the DASId will be modified before return if insert is successful /// /// /// /// /// id of das in Db after insert /// 0 (ERROR_SUCCESS) on success, all other values are errors /// returns ERROR_NOACCESS if user is not logged in 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(); } } /// /// returns the DAS requested. If no DASId or serial number is specified, returns all DAS /// user must be logged in /// /// /// /// null is allowed, specify an ID or leave null /// null and empty string allowed, specify a serial number or leave null /// das found, can be null or empty /// public ulong DASGet(IUserDbRecord user, IConnectionDetails connection, int clientDbVersion, string DASSerial, string position, out IDASDBRecord[] das) { das = null; var allDAS = new List(); 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(); } } } }