使用哪种方法更好:

  • BoundField.NullDisplayText 未设置。SQL 查询中预见到 NULL-case,即 SELECT ISNULL(amount, 0) FROM table

或者

  • BoundField.NullDisplayText 已设置,例如“0.00%”。SQL 查询中没有预见到 NULL-case,即 SELECT amount FROM table

你怎么认为?

有帮助吗?

解决方案

你能两全其美吗?

  • ISNULL 仅适用于这种情况
  • 格式/逻辑应该在 UI 中
  • 使用“金额”的其他客户端可能期望 NULL,因此您现在拥有不一致的“合同”
  • 0 表示零,NULL 表示未知/无:2个不同的状态

其他提示

显然是第一个,因为您使用 ISNULL 进行过滤。

我认为第二个选择更好。通常,在中间层或表示层而不是数据库中格式化输出更好。因此,我希望将空值返回到数据层代码之上的层,并让它决定如何显示,而不是在数据库中做出选择。

通过将空值转换为零,您可以向所有使用查询的系统声明空值等同于用户故意输入零。如果确实如此,那么可以使用 Coalesce 而不是 IsNull 并将 null 转换为零。但是,如果即使有极小的可能性,即查询将被重用,并且缺少值的处理方式可能与输入零不同,那么我将向中间层返回空值,并让它决定如何处理它。

区别在于 0.00 表示该字段有值,而 NULL 表示相反。因此,从数据健全性的角度来看,前者是正确的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top