【问题标题】:handle null from database处理数据库中的空值
【发布时间】:2011-03-30 12:22:36
【问题描述】:

我需要四舍五入并打印如下价格,但这不处理空值。
如何在一行代码中处理空值?
DBRSet 是一个SQLDataReader,价格是money 类型的SQL。

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

我有大约 200 个 .aspx 页面,所以我还可以使用一些技巧来轻松更改这些页面?我可以进行搜索并用 reg-exp 或类似的东西替换吗?

【问题讨论】:

  • DBRSet 当你像方法调用一样使用它时,它怎么能成为SQLDataReader?
  • 还是VB.NET?在这种情况下,您不需要演员表decimal 吗? DataReader 索引器返回object。

标签: .net vb.net null sqldatareader


【解决方案1】:

您必须明确处理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?)并在替换之前手动查看它来做到这一点。

【讨论】:

  • 啊,这可能会奏效。不过,这不是错字,它有效。
  • 我会做辅助方法的事情,所以这将是我问题的最佳答案。
【解决方案2】:

如果您不想更改 aspx,但可以轻松更改 DBRSet 属性的定义,则可以在 SqlDataReader 上放置一个包装器并实现您自己的索引器,该索引器将首先检查 null 和如果不为null,则进入内部dataReader获取值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2015-02-14
    • 1970-01-01
    • 2023-03-04
    • 2012-04-29
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多