如何在 .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"));
最简单的方法是修改 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"));