Ответы с форумов 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