zoukankan      html  css  js  c++  java
  • DB2 报错:CLI0111E 数值超出范围。 SQLSTATE=22003

    第一次抛出这个异常的时候,就马上着手尝试解决,解决了半小时还是这个问题,有点儿慌了,马上到处搜索,因为没有遇到这个问题,百度,Google,bing。。。。

    搜索SQLstatue,搜索SQLerror,搜索这个错误代码22003.。。。

    都是他娘的坑爹答案,一个东西到处他么的转载,一个错误答案到处他么的转载。。。

    转载的时候你们尝试了吗?解决问题了吗?鄙视这种垃圾程序员。

    使用C#读取DB2数据内容的时候,突然出现这个错误,经过无数次的debug,已经确定了,使用parameters传入的参数无问题,因为如果parameters传入的参数有问题的话,那么在ExecuteReader的时候就会抛出异常了;但是这个错误是在使用reader对象读取的时候抛出的。

    经过反复试验发现,是DB2返回的数据类型和C#实体类属性的数据类型不一致造成的,这个不一致可能会造成数据溢出,

    所以ADO这里直接抛出这个让人摸不着头脑的异常:CLI0111E  数值超出范围。 SQLSTATE=22003

    解决方式是:确定你数据库查询输出的数据类型,如果是数据库输出的是decimal类型,而你使用的接收实体字段属性类型不是decimal类型的,那么就会出现这个问题。

    因为double存储的数据长度和decimal存储的数据长度是不一样的,精度也就不一样,如果数据库输出的是decimal类型,而实体类确实double类型的,这个时候会丢失精度,也就会抛出这个异常了。

    我这里的错误就是,数据库查询出来的是decimal类型的,而我使用的实体类的属性类型确是double类型的,这个时候就出现了这个异常。

    我的最终解决方案是,输出的这个字段类型使用   DOUBLE(round(字段算法,2)),输出double类型,保留两位小数。

    这个是我遇到这个问题的解决方案,如果你也是这个问题,那么应该帮到您了;如果需要精度,建议调整字段类型,与数据库字段的最终类型保持一致。

    技术交流群:88390778

  • 相关阅读:
    Oracle 删除重复数据的几种方法
    12.25模拟赛T3
    java实现第五届蓝桥杯圆周率
    java实现第五届蓝桥杯武功秘籍
    Oracle 审计初步使用
    [CERC2017]Intrinsic Interval——扫描线+转化思想+线段树
    ORA-12012 Error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_<NN> in 12.2.0 Database
    12.25模拟赛T2
    java实现第五届蓝桥杯写日志
    java实现第五届蓝桥杯李白打酒
  • 原文地址:https://www.cnblogs.com/Object-Class/p/9234269.html
Copyright © 2011-2022 走看看