using DbAPI.Connections;
using DbAPI.Errors;
using DbAPI.Logging;
using DTS.Common.Classes.Channels;
using DTS.Common.Interface.Database;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using DTS.Common.Interface.Channels;
using DTS.Common.Classes.Groups.ChannelSettings;
using DTS.Common.Enums.Channels;
using DTS.Common.Interface.Channels.ChannelCodes;
using DTS.Common.Classes.ChannelCodes;
using DTS.Common.Classes;
using DTS.Common;
using DTS.Common.Enums.DASFactory;
namespace DbAPI.Channels
{
///
/// Handles channel functions
///
internal class Channels : IChannels
{
///
/// insert a new channel code, channel code is modified with a new id if successful
///
/// user submitting request
/// connection being submitted on
/// channel code to insert
/// mapping of code type to code type integer
/// new id of channel code record inserted
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong ChannelCodesInsert(IUserDbRecord user, IConnectionDetails connection,
IReadOnlyDictionary lookup, IChannelCode channelCode,
out int id)
{
id = -1;
if (null == channelCode) { return ErrorCodes.ERROR_MISSING_PARAMETER; }
if (string.IsNullOrEmpty(channelCode.Code) || string.IsNullOrEmpty(channelCode.Name))
{
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_ChannelCodesInsert");
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Code", SqlDbType.NVarChar, 255) { Value = channelCode.Code });
cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 255) { Value = channelCode.Name });
cmd.Parameters.Add(new SqlParameter("@CodeType", SqlDbType.Int) { Value = lookup[channelCode.CodeType] });
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);
var newId = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newId);
_ = cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelCodesInsert - Error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
if (DBNull.Value.Equals(newId.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelCodesInsert - Error, null new id");
return ErrorCodes.ERROR_UNKNOWN;
}
id = Convert.ToInt32(newId.Value);
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelCodesInsert - Error - {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// Update a channel record in the database
///
/// user committing change
/// connection change is committed on
/// channel code being record being updated
/// mapping of code type to code type integer
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong ChannelCodesUpdate(IUserDbRecord user, IConnectionDetails connection,
IReadOnlyDictionary lookup, IChannelCode channelCode)
{
if (null == channelCode) { return ErrorCodes.ERROR_MISSING_PARAMETER; }
if (string.IsNullOrEmpty(channelCode.Code) || string.IsNullOrEmpty(channelCode.Name))
{
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_ChannelCodesUpdate");
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = channelCode.Id });
cmd.Parameters.Add(new SqlParameter("@Code", SqlDbType.NVarChar, 255) { Value = channelCode.Code });
cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 255) { Value = channelCode.Name });
cmd.Parameters.Add(new SqlParameter("@CodeType", SqlDbType.Int) { Value = lookup[channelCode.CodeType] });
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))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelCodesInsert - Error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelCodesInsert - Error - {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// deletes matching channel codes
///
/// user making deletes
/// connection to delete on
/// id of channel code
/// code of matching channel codes (can be null)
/// name of matching channel codes (can be null)
/// code type of matching channel codes (can be null)
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong ChannelCodesDelete(IUserDbRecord user,
IConnectionDetails connection,
int? id,
string code,
string name,
int? codeType)
{
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_ChannelCodesDelete");
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null != id)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)id });
}
else { cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null }); }
cmd.Parameters.Add(new SqlParameter("@Code", SqlDbType.NVarChar, 255) { Value = code });
cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 255) { Value = name });
if (null == codeType)
{
cmd.Parameters.Add(new SqlParameter("@CodeType", SqlDbType.Int) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@CodeType", SqlDbType.Int) { Value = (int)codeType }); }
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))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelCodesDelete - Error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelCodesDelete error - {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// retrieves all matching channel code types (int identifier and string identifier)
///
/// user making request
/// connection request is being made on
/// code type (use null for all)
/// id (use null for all)
/// all matching records
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong ChannelCodeTypesGet(IUserDbRecord user,
IConnectionDetails connection,
short? id,
string codeType,
out Tuple[] records)
{
records = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_ChannelCodeTypeGet");
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == id)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.TinyInt) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.TinyInt) { Value = (short)id });
}
cmd.Parameters.Add(new SqlParameter("@CodeType", SqlDbType.NVarChar, 50) { Value = codeType });
var reader = cmd.ExecuteReader();
var list = new List>();
while (reader.Read())
{
var itemId = Utility.GetShort(reader, "Id");
var cType = Utility.GetString(reader, "CodeType");
list.Add(new Tuple(itemId, cType));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelCodeTypesGet failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// retrieves all matching channel codes
///
/// user making request
/// connection query is being made on
/// id of channel code (use null for all)
/// code of channel code (use null for all)
/// name of channel code (use null for all)
/// code type of channel code (use null for all)
/// lookup of a short to a string for a channel code type
/// matching records
/// 0 (ERROR SUCCESS) on success, all other values are error codes
public ulong ChannelCodesGet(IUserDbRecord user,
IConnectionDetails connection,
int? Id,
string code,
string name,
ChannelEnumsAndConstants.ChannelCodeType? codeType,
IReadOnlyDictionary channelTypeLookup,
out IChannelCode[] records
)
{
records = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
if (null == channelTypeLookup)
{
return ErrorCodes.ERROR_MISSING_PARAMETER;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_ChannelCodesGet");
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("@Code", SqlDbType.NVarChar, 255) { Value = code });
cmd.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 255) { Value = name });
if (null == codeType)
{
cmd.Parameters.Add(new SqlParameter("@CodeType", SqlDbType.SmallInt) { Value = null });
}
else { cmd.Parameters.Add(new SqlParameter("@CodeType", SqlDbType.SmallInt) { Value = (short)codeType }); }
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
list.Add(new ChannelCode(reader, channelTypeLookup));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelCodesGet failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// updates the default value for a channel setting
///
/// user making update
/// connection update is being made on
/// setting id to update
/// new value for setting
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong ChannelSettingsUpdate(IUserDbRecord user,
IConnectionDetails connection,
int settingId,
string defaultValue)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_ChannelSettingsUpdate");
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = settingId });
cmd.Parameters.Add(new SqlParameter("@DefaultValue", SqlDbType.NVarChar, 255) { Value = defaultValue });
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);
var reader = cmd.ExecuteReader();
var o = errorNumber.Value;
if (!DBNull.Value.Equals(o) && 0 != Convert.ToInt32(o))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelSettingsUpdate failed: {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelSettingsUpdate failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// retrieves all channel settings from the db for a given channel
///
/// user making request
/// connection request is being made on
/// channel id to match (allows null)
/// setting name to match (allows null/empty)
/// matching records
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong ChannelSettingsGet(IUserDbRecord user,
IConnectionDetails connection,
int? settingId,
string settingName,
out IChannelSettingRecord[] 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_ChannelSettingsGet"));
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
if (null == settingId)
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
}
else
{
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)settingId });
}
cmd.Parameters.Add(new SqlParameter("@SettingName", SqlDbType.NVarChar, 255) { Value = settingName });
var reader = cmd.ExecuteReader();
var list = new List();
while (reader.Read())
{
list.Add(new ChannelSettingRecord(reader));
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelSettingsGet failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// removes group channel settings from the db for a given channel
///
/// user requesting changes
/// connection changes are being made on
/// channel settings belong to
/// setting which to delete (use null to delete all settings)
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong GroupChannelSettingsDelete(IUserDbRecord user,
IConnectionDetails connection,
long channelId,
int? settingId)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_GroupChannelSettingsDelete");
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@ChannelId", SqlDbType.BigInt) { Value = channelId });
if (null != settingId)
{
cmd.Parameters.Add(new SqlParameter("@SettingId", SqlDbType.Int) { Value = (int)settingId });
}
else
{
cmd.Parameters.Add(new SqlParameter("@SettingId", SqlDbType.Int) { Value = null });
}
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);
var reader = cmd.ExecuteReader();
var o = errorNumber.Value;
if (!DBNull.Value.Equals(o) && 0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelSettingsDelete failed: {errorNumber.Value} : {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelSettingsDelete failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// Inserts a new channel setting record into db
///
/// user inserting record
/// connection record is being inserted on
/// connection client db version
/// channel setting belongs to
/// record being inserted
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong GroupChannelSettingsInsert(IUserDbRecord user,
IConnectionDetails connection,
int clientDbVersion,
long channelId,
IGroupChannelSettingRecord record)
{
SqlCommand cmd;
var storedProcedureVersionToUse = 0;
var ret = Database.Database.PrepareForDbAccess(user, connection, clientDbVersion,
"sp_GroupChannelSettingsInsert", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@ChannelId", SqlDbType.BigInt) { Value = channelId });
cmd.Parameters.Add(new SqlParameter("@SettingId", SqlDbType.Int) { Value = record.SettingId });
cmd.Parameters.Add(new SqlParameter("@SettingValue", SqlDbType.NVarChar, 255) { Value = record.SettingValue });
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);
var reader = cmd.ExecuteReader();
var o = errorNumber.Value;
if (!DBNull.Value.Equals(o) && 0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelSettingsInsert failed: {errorNumber.Value} : {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelSettingsInsert failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
///
/// returns all channel settings for a given channel
///
/// user making request
/// calling client's database version
/// connection request is being made on
/// list of channels for the request
/// all matching channel settings
/// any errors encountered while retrieving group channel settings
/// 0 (ERROR_SUCCESS) on success, all other values are error codes
public ulong GroupChannelSettingsGet(IUserDbRecord user,
IConnectionDetails connection,
int clientDbVersion,
List channelIdList,
out IGroupChannelSettingRecord[] records,
out string[] errors)
{
errors = new string[0];
records = new IGroupChannelSettingRecord[0];
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
var ret = Database.Database.PrepareForDbAccess(user, connection, clientDbVersion,
"sp_GroupChannelSettingsGet", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
cmd.CommandType = CommandType.StoredProcedure;
try
{
var list = new List();
if (storedProcedureVersionToUse < Constants.BULK_GROUPCHANNELSETTINGS_GET_DB_VERSION)
{
//Call the old procedure that takes only one channel ID
foreach (var channelId in channelIdList)
{
if (ErrorCodes.ERROR_SUCCESS != ret) { return ret; }
//we can re-enter here, so clear the parameters just for simplicity
cmd.Parameters.Clear();
cmd.Parameters.Add(new SqlParameter("@ChannelId", SqlDbType.Int) { Value = channelId });
var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new GroupChannelSettingRecord(reader, storedProcedureVersionToUse) { ChannelId = channelId });
}
//http://manuscript.dts.local/f/cases/35503/Unable-to-add-a-test-setup-with-attached-database
//close the reader
reader.Close();
}
}
else
{
//Call the new procedure that takes a table of channel IDs
using (var table = new DataTable())
{
table.Columns.Add("Item", typeof(string));
foreach (var channelId in channelIdList)
{
table.Rows.Add(channelId.ToString());
}
var pList = new SqlParameter("@ChannelIdList", SqlDbType.Structured);
pList.TypeName = "dbo.StringList";
pList.Value = table;
cmd.Parameters.Add(pList);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
list.Add(new GroupChannelSettingRecord(reader, storedProcedureVersionToUse));
}
}
}
records = list.ToArray();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelSettingsGet failed: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
public ulong ChannelsInsert(IUserDbRecord user,
IConnectionDetails connection,
ref IChannelDbRecord channel)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_ChannelsInsert");
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = channel.GroupId });
cmd.Parameters.Add(new SqlParameter("@IsoCode", SqlDbType.NVarChar, 50) { Value = channel.IsoCode ?? "" });
cmd.Parameters.Add(new SqlParameter("@IsoChannelName", SqlDbType.NVarChar, 255) { Value = channel.IsoChannelName ?? "" });
cmd.Parameters.Add(new SqlParameter("@UserCode", SqlDbType.NVarChar, 50) { Value = channel.UserCode ?? "" });
cmd.Parameters.Add(new SqlParameter("@UserChannelName", SqlDbType.NVarChar, 255) { Value = channel.UserChannelName ?? "" });
object dasId = null;
if (channel.DASId > 0 && channel.DASChannelIndex >= 0)
{
dasId = channel.DASId;
}
cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = dasId });
cmd.Parameters.Add(new SqlParameter("@DASChannelIndex", SqlDbType.Int) { Value = channel.DASChannelIndex });
cmd.Parameters.Add(new SqlParameter("@GroupChannelOrder", SqlDbType.Int) { Value = channel.GroupChannelOrder });
cmd.Parameters.Add(new SqlParameter("@TestSetupOrder", SqlDbType.Int) { Value = channel.TestSetupOrder });
object sensorId = null;
if (channel.SensorId > 0)
{
sensorId = channel.SensorId;
}
cmd.Parameters.Add(new SqlParameter("@SensorId", SqlDbType.Int) { Value = sensorId });
cmd.Parameters.Add(new SqlParameter("@Disabled", SqlDbType.Bit) { Value = channel.Disabled });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = channel.LastModified });
cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar, 255) { Value = channel.LastModifiedBy });
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);
var newId = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
cmd.Parameters.Add(newId);
cmd.ExecuteNonQuery();
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error,
LogManager.LogEvents.TestSetups, $"ChannelsInsert error - {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
channel.Id = Convert.ToInt64(newId.Value);
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelsInsert error: {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
cmd.Dispose();
}
}
public ulong ChannelsUpdate(IUserDbRecord user,
IConnectionDetails connection,
IChannelDbRecord channel)
{
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_ChannelsUpdate");
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.BigInt) { Value = channel.Id });
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = channel.GroupId });
cmd.Parameters.Add(new SqlParameter("@IsoCode", SqlDbType.NVarChar, 50) { Value = channel.IsoCode });
cmd.Parameters.Add(new SqlParameter("@IsoChannelName", SqlDbType.NVarChar, 255) { Value = channel.IsoChannelName });
cmd.Parameters.Add(new SqlParameter("@UserCode", SqlDbType.NVarChar, 50) { Value = channel.UserCode });
cmd.Parameters.Add(new SqlParameter("@UserChannelName", SqlDbType.NVarChar, 255) { Value = channel.UserChannelName });
object dasId = null;
if (channel.DASId > 0)
{
dasId = channel.DASId;
}
cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = dasId });
cmd.Parameters.Add(new SqlParameter("@DASChannelIndex", SqlDbType.Int) { Value = channel.DASChannelIndex });
cmd.Parameters.Add(new SqlParameter("@GroupChannelOrder", SqlDbType.Int) { Value = channel.GroupChannelOrder });
cmd.Parameters.Add(new SqlParameter("@TestSetupOrder", SqlDbType.Int) { Value = channel.TestSetupOrder });
object sensorId = null;
if (channel.SensorId > 0)
{
sensorId = channel.SensorId;
}
cmd.Parameters.Add(new SqlParameter("@SensorId", SqlDbType.Int) { Value = sensorId });
cmd.Parameters.Add(new SqlParameter("@Disabled", SqlDbType.Bit) { Value = channel.Disabled });
cmd.Parameters.Add(new SqlParameter("@LastModified", SqlDbType.DateTime) { Value = channel.LastModified });
cmd.Parameters.Add(new SqlParameter("@LastModifiedBy", SqlDbType.NVarChar, 255) { Value = channel.LastModifiedBy });
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);
if (!DBNull.Value.Equals(errorNumber.Value) && 0 != Convert.ToInt32(errorNumber.Value))
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups,
$"ChannelsUpdate {errorNumber.Value} - {errorMessage.Value}");
return ErrorCodes.ERROR_UNKNOWN;
}
cmd.ExecuteNonQuery();
return ErrorCodes.ERROR_SUCCESS;
}
catch (Exception ex)
{
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.TestSetups, $"ChannelsUpdate {ex.Message}");
return ErrorCodes.ERROR_UNKNOWN;
}
finally
{
cmd.Connection.Dispose();
}
}
public ulong ChannelsGet(IUserDbRecord user,
IConnectionDetails connection,
int clientDbVersion,
long? channelId,
int? groupId,
int? dasId,
int? sensorId,
int? testSetupId,
string testSetupName,
out IChannelDbRecord[] channels)
{
channels = null;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var storedProcedureVersionToUse = 0;
SqlCommand cmd;
var ret = Database.Database.PrepareForDbAccess(user, connection, clientDbVersion, "sp_ChannelsGet", out storedProcedureVersionToUse, out cmd);
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
var list = new List();
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = channelId });
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = groupId });
cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = dasId });
cmd.Parameters.Add(new SqlParameter("@SensorId", SqlDbType.Int) { Value = sensorId });
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = testSetupId });
cmd.Parameters.Add(new SqlParameter("@TestSetupName", SqlDbType.NVarChar, 255) { Value = testSetupName });
var reader = cmd.ExecuteReader();
while (reader.Read())
{
//33192 Hide the TSR AIR Humidity channel
var newDbRecord = new ChannelDbRecord(reader);
if (newDbRecord.UserChannelName.EndsWith(DFConstantsAndEnums.USER_CHANNEL_NAME_HUMIDITY)) { continue; }
list.Add(newDbRecord);
}
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();
}
}
public ulong ChannelsDelete(IUserDbRecord user,
IConnectionDetails connection,
long id,
out string errorString)
{
errorString = string.Empty;
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
{
return ErrorCodes.ERROR_ACCESS_DENIED;
}
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_ChannelsDelete");
if (ret != ErrorCodes.ERROR_SUCCESS)
{
return ret;
}
var errorNumberULong = ErrorCodes.ERROR_SUCCESS;
try
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.BigInt) { Value = id });
cmd.Parameters.Add(new SqlParameter("@GroupId", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@DASId", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@SensorId", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = null });
cmd.Parameters.Add(new SqlParameter("@TestSetupName", SqlDbType.NVarChar, 255) { Value = null });
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 (null != errorNumber.Value)
{
if (Convert.ToInt32(errorNumber.Value) != 0)
{
errorNumberULong = Convert.ToUInt64(errorNumber.Value);
errorString = (string)errorMessage.Value;
}
}
}
catch (Exception ex)
{
//Concatenate any error string returned from the stored procedure call
errorString = $"{ex.Message}; {errorString}";
return errorNumberULong;
}
finally
{
cmd.Connection.Dispose();
}
return errorNumberULong;
}
}
}