无法将类型为“System.DBNull”的对象强制转换为类型“System.String”分析及解决方案

         今天在做项目的时候,无意间犯了一个错误,出现了:无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。的错误提示。想着很多的初学者可能会遇上同样的问题,现在分析出现的问题,并解决之。

问题:用强类型DataSet 获取Oracle数据,其中一个字段值为DBNull,报错:无法强制转换成String。

详细错误信息如下所示:

无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。  
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。  

异常详细信息: System.InvalidCastException: 无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。

源错误:  


行 5092: get {
行 5093: try {
行 5094: return ((string)(this[this.tableBRN_YXJX_MN_ATTACHED.AUDITER_CODEColumn]));
行 5095: }
行 5096: catch (global::System.InvalidCastException e) {后面还有很多的,就不再累述了。

出现问题的原因如下:

       数据库中很多字段是空值,但是需要加载到数据控件中,于是在默认的情况下就会出现问题了。因为微软在设计的时候就是默认的数据字段在加载的时候如果实例数据为空就会抛出异常,正是由于微软这个非常人性化的设计出现了上述的错误。

 

解决的方案:方案很多,这里就说说几种简单方便的方案。



1、打开强类型DataSet的设计视图,找到报错的列,选择此列,在【属性】窗口中可以看到一个设置

选项:

NullValue。

这个值有三个选项:Null,Empty,Throw exception


选择Null或者Empty就OK了。


这个选项用于设置如果所取数据的这个字段值为NullValue时的处理办法。

默认是第三个选项:抛出异常。

修改后就OK了!

 

2、可以改写SQL在 字段添加ISNULL(["你的要查询的字段"],0);这个的效果是如果这个字段的值是空那转成"0";

 

3、 在读取时价格判断,if(读的值!=“”){读取值,赋值;}这个是如果读的值不为空就执行赋值的操作

 

4、sdr.IsDBNull(5) ? string.Empty : sdr.GetString(5);这样问题就会迎刃而解了。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值