如何在 .net c# 中将 DBNull 转换为 0

本文关键字:DBNull 转换 中将 net | 更新日期: 2023-09-27 18:35:50

>我有一个错误,这是null值的结果。我希望所有null值都显示为0。我该怎么做?

对象不能从 DBNull 强制转换为其他类型。

说明:执行当前 Web 请求期间发生未经处理的异常。请查看堆栈跟踪,了解有关错误及其在代码中起源位置的详细信息。

异常详细信息:System.InvalidCastException:对象不能从 DBNull 强制转换为其他类型。

这是标记的行。

Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "December2013DailyOrderCount"));

如何在 .net c# 中将 DBNull 转换为 0

最简单的方法是修改 SQL 以使用 ISNULL 将 null 转换为默认值。

否则,您需要在 Web 应用程序代码中使用条件逻辑。这有多容易取决于上下文。在标记(例如项模板)中,它可能更难,在代码隐藏中,只需将下层值放入临时值,如果 null 返回 0。

只需对正在DBNull.Value的值进行额外的检查:

var input = DataBinder.Eval(e.Row.DataItem, "December2013DailyOrderCount");
var x = (input == DBNull.Value) ? 0 : (decimal)input;

另一种选择是在查询中解决此问题,如下所示:

select coalesce
       ( December2013DailyOrderCount
       , 0
       )
       December2013DailyOrderCount -- column alias!!!
from   xxx

你试过吗:

var value = DataBinder.Eval(e.Row.DataItem, "December2013DailyOrderCount");
Convert.ToDecimal(value == DbNull.Value ? 0 : value);
我认为在

函数后面创建一个代码并在绑定数据时调用该函数是件好事:

protected decimal ConvertNullDecinalToZero(object val){
  decimal number;
  if (Decimal.TryParse(value, out number))
     return number
 else
     return 0; 
}

var input = DataBinder.Eval(e.Row.DataItem, Convert("December2013DailyOrderCount"));
相关文章: