第一次拋出這個異常的時候,就馬上着手嘗試解決,解決了半小時還是這個問題,有點兒慌了,馬上到處搜索,因為沒有遇到這個問題,百度,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