2012-03-17 42 views
0

我正在使用ODBC讀取C#中的DB2數據庫,並在嘗試從DataReader訪問數據時發生溢出。我認爲問題在於DB2客戶端未設置爲正確報告數據類型。例如,它顯示字符字段爲類型「GRAPHIC()CCSID 13488」,這是IBM對我的gobbledygook。當.NET嘗試讀取一個我知道是一個12字符的字符串作爲Int32的字段時,會出現溢出。通過ODBC讀取DB2時發生溢出異常

很久以前,我和DB2一起工作過,回想起必須在客戶端中設置屬性,但我的調整都不起作用。有人可以幫忙嗎?

的操作系統是Windows Server 2008 R2中,64 ODBC驅動程序被命名爲「i系列訪問ODBC驅動程序」,指對DLL CWBODBC.DLL

這裏是設置的屏幕截圖,我認爲應該解決此問題: enter image description here

+0

它是Unicode的gobbledegook。對於int32,12個字符是有點多,嘗試先讀取它作爲一個字符串,並寫一些代碼,使用int.TryParse()來查看它翻倒的地方。 – 2012-03-17 15:24:53

+0

我認爲底層的問題是DB2驅動程序沒有正確報告數據庫類型,這導致我認爲調整驅動程序設置應該修復它。我的解決方案需要知道它正在閱讀的類型,而不是猜測它,因爲我擔心我會得到不一致的結果。 – 2012-03-17 15:27:30

+0

您記錄的問題是溢出異常。它在數值運算期間被提升,所以至少有一個字符串到數字的轉換被執行。不好聽的是有12個字符的列,一個int最多隻需要11個字符。奧卡姆的剃鬚刀說這是你的問題的原因,例如一列填充11或12位數的列。您可以通過自己進行轉換來找到它,以便捕獲異常並查看導致問題的記錄。 – 2012-03-17 16:17:12

回答

1

事實證明,上述「將二進制數據(CCSID 65535)轉換爲文本」的設置是正確的設置。問題是這隻適用於我使用32位驅動程序的情況。因此,現在我們只是將我們的應用程序設置爲32位,直到我們解決問題。但至少我們有一個解決方法,緊迫感會減弱。

相關問題