Ошибка при программном создании "прямое подключение"

Раздел для разработчиков по взаимодействию с ЛЭРС УЧЕТ, созданию собственных внешних модулей, экспорту/импорту данных и т.д.

Модератор: Модераторы

Закрыто
Анатольевич
Сообщения: 17
Зарегистрирован: 06 июн 2019, 10:52

Ошибка при программном создании "прямое подключение"

Сообщение Анатольевич » 27 ноя 2019, 14:57

Пытаюсь программно реализовать добавление "прямое подключение" в жилом объекте так:

Код: Выделить всё

        public static async Task SetAndCreateCOMPollConnectionAsync()
        {
            try
            {
                Lers.Poll.PollPort[] pollPorts = await SERVER.PollPorts.GetListAsync();
                House house = GetHouseByTitle("Дом Б");
                house.Refresh(NodeInfoFlags.PollConnections);
                Lers.Poll.PollConnection pollConnection = house.PollConnections.CreateNew(Lers.Poll.CommunicationLink.Direct, "Test");
                // MOXA COM21
                pollConnection.PollPortId = 31;
                // Получаем список оборудования по номеру COM порта 
                pollConnection.SetEquipmentList(GetEquipmentList("21"));
                pollConnection.PortSpeed = 9600;
                pollConnection.FlowControl = FlowControl.None;                
                house.PollConnections.Add(pollConnection);                
                house.SaveAsync();
            }
            catch(Exception e)
            {
               // Log("Подключение оборудования в доме [" + house.Title + "] завершилось ошибкой!", 1);
                Log(e.Message, 2);
                Log(e.StackTrace, 3);
            }
        }
Выдает следующую ошибку при вызове метода house.SaveAsync()
Ошибка выполнения запроса "EDIT_NODE". The INSERT statement conflicted with the CHECK constraint "CK_PollConnection_Direct". The conflict occurred in database "LERS", table "dbo.PollConnection". (Имя входа: admin)
Делаю все тоже самое руками и оно работает.
serial2.PNG
seraial1.PNG
Есть стойкое ощущение что делаю что то жутко не так :du_ma_et:
Анатольевич
Сообщения: 17
Зарегистрирован: 06 июн 2019, 10:52

Re: Ошибка при программном создании "прямое подключение"

Сообщение Анатольевич » 28 ноя 2019, 08:06

Отладка выдает следующее:
Ошибка выполнения операции #EDIT_NODE (EDIT_NODE) для сеанса работы #397.

1. [.Net SqlClient Data Provider] System.Data.SqlClient.SqlException: The INSERT statement conflicted with the CHECK constraint "CK_PollConnection_ConnectionTimeout". The conflict occurred in database "LERS", table "dbo.PollConnection".

Стек вызовов:
в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
в System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
в System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
в System.Data.SqlClient.SqlDataReader.Read()
в System.Data.SqlClient.SqlCommand.CompleteExecuteScalar(SqlDataReader ds, Boolean returnSqlValue)
в System.Data.SqlClient.SqlCommand.ExecuteScalar()
в Lers.Dal.DbQuery.TryExecuteWithErrorHandling(ExecutionResultType resultType, CancellationToken cancellationToken)
в Lers.SqlQuery.TryExecuteWithErrorHandling(ExecutionResultType resultType, CancellationToken cancellationToken)
в Lers.Dal.DbQuery.ExecuteWithErrorHandling(ExecutionResultType resultType)
в Lers.Dal.DbQuery.ExecuteScalar()
в Lers.Dal.PollConnectionDataAccess.Create(PollConnection record)
в Lers.Poll.PollConnectionManager.Create(PollConnection pollConnection)
в Lers.Core.Node.SetPollConnections(IEnumerable`1 connectionList, Boolean force)
в Lers.Core.NodeManager.SetNodeParameters(IAccount currentAccount, Node node, EditNodeRequestParameters param, List`1 updatedParameters, Boolean& needFireMeasurePointChanged)
в Lers.Core.NodeManager.ProcessRequestEdit(IAccount currentAccount, EditNodeRequestParameters param)
в Lers.RequestProcessor.ProcessRequest(ISession currentSession, Int32 operationId, Int32 requestId, PropertyBag requestData, CancellationToken cancellationToken)

Дополнительная информация (Data):
HelpLink.ProdName=Microsoft SQL Server
HelpLink.ProdVer=12.00.2000
HelpLink.EvtSrc=MSSQLServer
HelpLink.EvtID=547
HelpLink.BaseHelpUrl=http://go.microsoft.com/fwlink
HelpLink.LinkId=20476
Query=sp_InsPollConnection @Title='Test', @CommLinkType=1, @PollPortId=31, @PollPortGroupId=NULL, @CommDeviceEquipmentId=NULL, @CommDevicePortId=NULL, @CommDevicePortSettingsId=NULL, @ConnectionTimeout=4, @DialNumber='', @CommLinkProtocol=0, @GprsCallType=0, @GprsAutoDisconnect=False, @InternetHost='', @InternetPort=0, @ImitateModem=False, @PortSpeed=9600, @FlowControl=1
IsProcessingCanceled=False

Дополнительная информация из ExternalException:
HRESULT=0x80131904

Дополнительная информация из SqlException:
Message=The INSERT statement conflicted with the CHECK constraint "CK_PollConnection_ConnectionTimeout". The conflict occurred in database "LERS", table "dbo.PollConnection".
Class=16
Number=547
State=0
Server=(local)\LERS
Procedure=sp_InsPollConnection
LineNumber=24
Source=.Net SqlClient Data Provider

--------------------------------------------------------------------------------------
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 6894
Зарегистрирован: 02 мар 2016, 05:45

Re: Ошибка при программном создании "прямое подключение"

Сообщение Иван Славный » 28 ноя 2019, 08:37

FlowControl.None это системное значение управления потоком с обозначением "Неизвестен".
Управление потоком с обозначением "Отсутствует" это FlowControl.Off.
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
Анатольевич
Сообщения: 17
Зарегистрирован: 06 июн 2019, 10:52

Re: Ошибка при программном создании "прямое подключение"

Сообщение Анатольевич » 28 ноя 2019, 09:21

Ура. Разобрался. Спасибо за подсказку! Все отлично работает.
Последний раз редактировалось Анатольевич 28 ноя 2019, 09:37, всего редактировалось 1 раз.
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 6894
Зарегистрирован: 02 мар 2016, 05:45

Re: Ошибка при программном создании "прямое подключение"

Сообщение Иван Славный » 28 ноя 2019, 09:34

А что возвращает GetEquipmentList("21")? Вы уверены что данный метод возвращает непустой массив?
20 и 21 июля 2020. IX обучающий семинар в Москве. Подробнее ...
Анатольевич
Сообщения: 17
Зарегистрирован: 06 июн 2019, 10:52

Re: Ошибка при программном создании "прямое подключение"

Сообщение Анатольевич » 28 ноя 2019, 09:39

Да GetEquipmentList("21") возвращал пустой массив. (Я выбирал 21 порт не из той таблицы не из того дома в общем в котором этого порта нет :))) мой косяк.
Закрыто