Плавать на PostgreSQL с помощью c # - PullRequest
3 голосов
/ 26 февраля 2012

Я использую это

это тип данных, который я отправляю в cmd:

NpgsqlTypes.NpgsqlDbType.Real;

здесь я проверяю это числовое значение:

   public bool IsNumeric(String value){
        try{
            float.Parse(value);
            return true;
        }
        catch(Exception e){
            return false;
        }
    }

А вот таблица изменений:

ALTER TABLE "Лекарство" ADD COLUMN "Цена" реальная ALTER TABLE "Лекарство" ALTER COLUMN "Цена" SET NOT NULL;

Тип данных таблицы тоже Реальный, вот как я могу сохранить "float", потому что он видел, что PostgreSQL не имеет float. Я пытался с двойной, деньги, числовые, и до сих пор не работает. Числа вставлены в таблицу, но без ".", Например, я пишу 12,34 и 1234 вставляется. Уже все проверил при отладке.

Как я могу решить это?

1 Ответ

2 голосов
/ 26 февраля 2012

Прежде всего ваша функция isNumeric - это плохой способ проверить, является ли строковое значение числовым, это потрясающее использование try-catch construct ...

Вы должны проверить, является ли строка числовой с помощью регулярного выражения, подобного следующему:

public static bool IsNumeric(string value)
{
    bool match;
    //regular expression to match numeric values
    string pattern = "(^[-+]?\\d+(,?\\d*)*\\.?\\d*([Ee][-+]\\d*)?$)|(^[-+]?\\d?(,?\\d*)*\\.\\d+([Ee][-+]\\d*)?$)";
    Regex regEx = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
    match = regEx.Match(value).Success;
    return match;
}

Затем, чтобы вставить значение REAL в таблицу, вы должны преобразовать его в тип данных Single .NET, взгляните на таблицу в ответе на этот вопрос .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...