DBExportPlus, ошибка.

Просмотр 11 сообщений - с 1 по 11 (из 11 всего)
  • Автор
    Сообщения
  • #41313
    Oleg
    Участник

    Здравствуйте,

    Может кто подскажет. Драйвер работает нормально, но изредка перестает писать в БД.
    Версия Импорт из БД Плюс 6.3.0.0

    Лечится перезапуском линии связи. Сразу все работает.

    Из лога до перезапуска.

    2025-12-05 17:56:15 Команда DBExpCVDCRN устройству [500] Экспорт в БД: number
    2025-12-05 17:56:15 Получена команда.
    2025-12-05 17:56:15 Дата: 2025-12-05 14:56:14
    2025-12-05 17:56:15 Пользователь ID: 11
    2025-12-05 17:56:15 Номер устройства: 500
    2025-12-05 17:56:15 Номер команды (@cmdNum): 502
    2025-12-05 17:56:15 Код команды (@cmdCode): DBExpCVDCRN
    2025-12-05 17:56:15 Значение команды (@cmdVal): не число
    2025-12-05 17:56:15 Значение команды (@cmdData): 425410JHL1BF1AQ0
    2025-12-05 17:56:15 Запрос на изменение данных
    2025-12-05 17:56:15 UPDATE write_table
    SET RollNumber = @CmdVal, DateTime = Now()
    WHERE RollType = ‘Current’;
    2025-12-05 17:56:15 Ошибка при отправке команды БД: System.FormatException: The input string ‘425410JHL1BF1AQ0’ was not in a correct format.
    at System.Number.ThrowFormatException[TChar](ReadOnlySpan`1 value)
    at System.String.System.IConvertible.ToDouble(IFormatProvider provider)
    at MySql.Data.Types.MySqlDouble.MySql.Data.Types.IMySqlValue.WriteValueAsync(MySqlPacket packet, Boolean binary, Object val, Int32 length, Boolean execAsync)
    at MySql.Data.MySqlClient.MySqlParameter.SerializeAsync(MySqlPacket packet, Boolean binary, MySqlConnectionStringBuilder settings, Boolean execAsync)
    at MySql.Data.MySqlClient.Statement.SerializeParameterAsync(MySqlParameterCollection parameters, MySqlPacket packet, String parmName, Int32 parameterIndex, Boolean execAsync)
    at MySql.Data.MySqlClient.Statement.InternalBindParametersAsync(String sql, MySqlParameterCollection parameters, MySqlPacket packet, Boolean execAsync)
    at MySql.Data.MySqlClient.Statement.BindParametersAsync(Boolean execAsync)
    at MySql.Data.MySqlClient.Statement.ExecuteAsync(Boolean execAsync)
    at MySql.Data.MySqlClient.PreparableStatement.ExecuteAsync(Boolean execAsync)
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteReaderAsync(CommandBehavior behavior, Boolean execAsync, CancellationToken cancellationToken)
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteReaderAsync(CommandBehavior behavior, Boolean execAsync, CancellationToken cancellationToken)
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteReaderAsync(CommandBehavior behavior, Boolean execAsync, CancellationToken cancellationToken)
    at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQueryAsync(Boolean execAsync, CancellationToken cancellationToken)
    at Scada.Comm.Drivers.DrvDbImportPlusLogic.Logic.DevDbImportPlusLogic.SendDbCommand(DbCommand dbCommand)

    Из лога после перезапуска.

    2025-12-05 17:56:35 Команда DBExpCVDCRN устройству [500] Экспорт в БД: number
    2025-12-05 17:56:35 Получена команда.
    2025-12-05 17:56:35 Дата: 2025-12-05 14:56:34
    2025-12-05 17:56:35 Пользователь ID: 11
    2025-12-05 17:56:35 Номер устройства: 500
    2025-12-05 17:56:35 Номер команды (@cmdNum): 502
    2025-12-05 17:56:35 Код команды (@cmdCode): DBExpCVDCRN
    2025-12-05 17:56:35 Значение команды (@cmdVal): не число
    2025-12-05 17:56:35 Значение команды (@cmdData): 425410JHL1BF1AQ0
    2025-12-05 17:56:35 Запрос на изменение данных
    2025-12-05 17:56:35 UPDATE write_table
    SET RollNumber = @CmdVal, DateTime = Now()
    WHERE RollType = ‘Current’;
    2025-12-05 17:56:35 Изменено записей 1

    #41320
    Mikhail
    Модератор

    Добрый день!
    То есть одна и та же команда может вызвать ошибку, а после перезапуска работает нормально?
    Надеюсь, автор драйвера поможет в диагностике.

    #41321
    Mikhail
    Модератор

    > Значение команды (@cmdVal): не число
    > System.String.System.IConvertible.ToDouble
    Эти строки наводят на мысль, что запрос на таких данных и должен выдавать ошибку.
    Драйвер, вероятно, должен преобразовывать double.NaN в DBNull.Value.

    #41327
    Oleg
    Участник

    Добрый день!
    То есть одна и та же команда может вызвать ошибку, а после перезапуска работает нормально?
    Надеюсь, автор драйвера поможет в диагностике.

    Да, все верно. Одна и таже команда из МАУ каждые 5с.

    Обновил драйвер до 6.3.0.2, наблюдаем

    #41328
    JurasskPark
    Участник

    Вот почему вы в субботу не отдыхаете? Нет чтобы пили компот и ели торт. Эх…
    Вообщем, если null придетает и его надо в DB.Null конвертировать… Я добавил, но мне не понятно… Почему МЯУ его отправляет? Как?

    Новая версия. Но я не верю, что она поможет.
    https://github.com/JurasskPark/RapidScada_v6/releases/tag/DrvDbImportPlus_v6.3.0.4

    #41329
    Oleg
    Участник

    пот и ели торт. Эх…
    Вообщем, если null придетает и его надо в DB.Null конвертировать… Я добавил, но мне не понятно… Почему МЯУ его отправляет? Как?

    Новая версия. Но я не верю, что она поможет.
    https://github.com/JurasskPark/RapidScada_v6/releases/tag/DrvDbImportPlus_v6.3.0.4

    Спасибо, попробуем 👍
    P.S. Сменный график, что поделать ;)))

    #41330
    Mikhail
    Модератор

    Если в команде заполнено CmdData, то при этом CmdVal может оказаться double.NaN
    А если наоборот, то CmdData равно null.

    #41489
    JurasskPark
    Участник

    @Oleg, что там с драйвером?
    Ошибки были?

    #41492
    Oleg
    Участник

    Здравствуйте 👋
    Пока работает как надо, сбоев и ошибок не было. Спасибо!

    #41493
    JurasskPark
    Участник

    Ок. Через полгода расскажете. 😀

    #41494
    Oleg
    Участник

    Конечно, будут проблемы — напишу обязательно)

Просмотр 11 сообщений - с 1 по 11 (из 11 всего)
  • Для ответа в этой теме необходимо авторизоваться.