Двойное приведение из запроса petapoco sql с запятой десятичного разделителя MS Access - PullRequest
0 голосов
/ 03 июля 2019

Я получаю записи из базы данных MS Access. Десятичный разделитель базы данных - запятая, и я не могу его изменить. Значение из результата SQL, приведенное к Double, возвращает неправильное значение, так как оно не совпадает в базе данных, я полагаю, из-за разных культур в базе данных и коде. Я использую библиотеку Petapoco.

Возможно, есть способ установить Культуру в Petapoco, но как?

public class TExternalProp
{
    public String ObjectID { get; set; }
    public String ObjectTable { get; set; }
    public String PropName { get; set; }
    public int PropType { get; set; }
    public String PropStringValue { get; set; }
    public Double PropDoubleValue { get; set; }
    public int PropIntValue { get; set; }
}


sql = Sql.Builder.Append("WHERE ObjectID=@0 AND ObjectTable=@1 AND PropType<>@2 ", this.box_CMSID, "TSelectiveBox", 4);
      sql.Append("ORDER BY PropName ASC;");

foreach (TExternalProp item in petaDb.Fetch<TExternalProp>(sql))
{
    myViewModel.ObCol_BoiteInstructions.set_values(item.PropName, item.PropType, item.PropStringValue, item.PropDoubleValue, item.PropIntValue);
}

Значение в базе данных равно 3,2, приведение при возврате 3.2000000476837158 в элементе PropDoubleValue. Мне нужно получить точно такое же значение, как в базе данных. Есть идеи?

Решение:

MS Access Single Real = тип с плавающей точкой в ​​C #. MS Access Double Real = двойной тип в C #

1 Ответ

1 голос
/ 04 июля 2019

Мне удалось воспроизвести это, если свойство имеет значение Double, как указано выше, но поле в базе данных Access определено как одно:

Access

Попробуйте изменить определение свойства на Single и посмотрите, исправит ли это что-то.

Редактировать: Исправлено использование заглавных букв в именах типов.

...