обрабатывать ноль из базы данных - PullRequest
1 голос
/ 30 марта 2011

Мне нужно округлить и напечатать цену, как показано ниже, но это не обрабатывает нулевые значения.
Как я могу обработать нулевые значения в одной строке кода?
DBRSet - это SQLDataReader и цена составляет money введите SQL.

<%= Math.Round(DBRSet("price"))%>

У меня есть около 200 страниц ASPX, так что я мог бы также использовать несколько советов о том, как их легко изменить?Могу ли я выполнить поиск и заменить его на reg-exp или что-то в этом роде?

Ответы [ 2 ]

2 голосов
/ 30 марта 2011

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

<%= DbNull.Equals(DBRSet["price"]) ? "null" : Math.Round(DBRSet["price"]).ToString() %>

Это громоздко, поэтому имеет смысл иметь вспомогательный метод где-то вроде этого:

static class FormatDbValue {
    public static string Money(object value)
    {
        if (DbNull.Equals(value)) {
             return "0";
        }

        return Math.Round((decimal)value);
    }
}

Что позволило бы

<%= FormatDbValue.Money(DBRSet["price"]) %>

Конечно, поиск и изменение всего такого кода для использования вспомогательного метода было бы ... неприятно.Я бы сделал это, выполнив поиск по всему проекту (может быть, в небольших частях проекта) что-то показательное (может быть, Math.Round?) И проверял бы это вручную перед заменой.

0 голосов
/ 30 марта 2011

Если вы не хотите изменять aspx, но можете легко изменить определение свойства DBRSet, вы можете поместить обертку над SqlDataReader и реализовать свой собственный индексатор, который сначала проверял бы на null иперейдите во внутренний dataReader, чтобы получить значение, если не ноль.

...