Ответы с форумов MSDN
OleDB - Разделитель десятичной части чисел при работе с MS Access
Date: 08.02.2021 3:45:26
В формате США запятая - это разделитель тысяч, а разделитель десятичной части - точка. Сам Access эти форматы обрабатывает отлично. Ошибка где-то при преобразовании между текстом и числом в вашем коде.
Message 78
Date: 08.02.2021 10:18:53
Этот подход в корне неверен. Access при использовании и ODBC, и OleDB умеет принимать сразу числовое значение нужного типа, никакого преобразования в строку вообще не должно фигурировать. Либо, если оно есть, оно должно осуществляться с предопределенным
CultureInfo, так что бы разделитель был известен.
Message 77
Date: 08.02.2021 11:05:27
Нет, это еще хуже. Надо передавать правильный CultureInfo в тот метод, который осуществяляет преобразование (Double.Parse, Double.ToString, ...), а не устанавливать глобально. В каких-то других методах может понадобиться именно
системная культура.
Message 76
Date: 08.02.2021 16:13:57
Этот код нужно выкинуть и переписать по нормальному. Здесь не преобразование в строку нужно, а использование параметризованных запросов: https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/configuring-parameters-and-parameter-data-types
Если запрос будет "INSERT INTO `t1` (`Число`) VALUES ('?')", а значение передается через параметр (cmd.Parameters.AdddWithValue("param",SERVDATA)),то
проблемы со знаками разделителей не будет.
Как я уже написал, Access поддерживает передачу числовых значений напрямую, без преобразования в строку, нужно лишь правильно ей воспользоваться
Message 75
Date: 09.02.2021 3:34:13
Значения данных в запрос в любом случае нужно вставлять параметрами, не важно, строка это это или число. Да, если значение числовое, его нужно перевести в число с помощью той же культуры, с помощью которой его преобразовали
в текст на сервере. Лучше использовать CultureInfo.InvariantCulture вместо ru-RU, так как загрузка русского языка может потребовать дополнительных ресурсов на не русскоязычной ОС, или вообще упасть с ошибкой, если какого-то пакета не хватает. Правильный
подход именно такой.
Message 74
Date: 10.02.2021 16:40:57
Попробуйте сами, и увидите, получиться или нет. InvariantCulture - это почти то же самое, что en-us, только для нее гарантируется, что она всегда доступна и ее параметры не зависят от настроек системы и обновлений. То есть для передачи
данных по сети это как раз то, что нужно. С использованием другой культуры может получиться, но до поры до времени.
Автор: VadimTagil
Главная страница - Список тем - Репозиторий на GitHub