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

猜你喜欢

转载自www.cnblogs.com/Object-Class/p/9234269.html