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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步