【发布时间】:2012-04-02 14:47:35
【问题描述】:
我正在使用 ODBC 读取 C# 中的 DB2 数据库,并在尝试从 DataReader 访问该数据时出现溢出。我认为问题在于 DB2 客户端未设置为正确报告数据类型。例如,它将字符字段显示为类型“GRAPHIC() CCSID 13488”,这对我来说是 IBM gobbledygook。当 .NET 尝试读取一个我知道是 12 个字符的字符串作为 Int32 的字段时,就会发生溢出。
很久以前,我使用 DB2 并记得必须在客户端中设置属性,但我的任何调整都不起作用。有人可以帮忙吗?
操作系统是 Windows Server 2008 R2, x64 ODBC驱动名为“iSeries Access ODBC Driver”,参考dll CWBODBC.DLL
这是我认为应该可以解决此问题的设置的屏幕截图:
【问题讨论】:
-
这是 Unicode 的 gobbledegook。 12 个字符对于 int32 来说有点多,请先尝试将其作为字符串读取,然后编写一些使用 int.TryParse() 的代码来查看它落在哪里。
-
我认为根本问题是 DB2 驱动程序没有正确报告数据库类型,这使我认为调整驱动程序设置应该可以解决它。我的解决方案需要知道它正在读取的类型,而不是猜测它,因为我担心我会得到不一致的结果。
-
您记录的问题是溢出异常。它是在数值运算期间引发的,因此至少会执行一个字符串到数字的转换。听起来不好的是一列有 12 个字符,一个 int 最多只需要 11 个。奥卡姆剃刀说这是您的问题的原因,例如,一列填充了 11 或 12 位数字。您可以通过自己进行转换来找到它,这样您就可以捕获异常并查看导致问题的记录。