You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅本机环境IfxDataReader读取小数触发FormatException异常求助

问题现象

通过IfxDataReader读取Informix数据库Decimal类型字段时,在myReader("decimalValue")处触发System.FormatException,异常堆栈指向数值解析逻辑,相同代码在其他设备运行正常,仅本机复现问题。
复现代码如下:

Using myCon As New IfxConnection("CONSTRING")
    Dim myQuery = "SELECT decimalValue FROM exampletable"
    Using myCmd As New IfxCommand(myQuery, myCon)
        myCon.Open()
        Using myReader As IfxDataReader = myCmd.ExecuteReader
            While myReader.Read
                ' 错误触发位置
                Dim myVariable As Double = myReader("decimalValue")
            End While
        End Using
    End Using
End Using

异常堆栈信息:

at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseDecimal(String value, NumberStyles options, NumberFormatInfo numfmt)
at IBM.Data.Informix.IfxDataReader.GetSytemTypeFromCacheType(Type systemType, Type cacheEntryType, Object cacheEntry)
at IBM.Data.Informix.IfxDataReader.GetValue(Int32 i)
at IBM.Data.Informix.IfxDataReader.get_Item(String value)

当前使用的IBM.Data.Informix DLL文件版本为4.0.1000.2,产品版本为4.00.01000.2,已正确引入命名空间、添加引用,安装Informix Client SDK后问题未解决。

故障原因

该问题是本机系统区域数字格式配置与旧版Informix驱动的内置解析逻辑不兼容导致:你使用的4.0.1000.2版驱动在通过索引器读取字段值时,会依赖系统全局的数字格式配置做字符串到Decimal的转换,一旦本机配置的小数点、千位分隔符和驱动预期的格式不匹配,就会触发解析异常,和是否安装Client SDK无直接关联。

解决方法

按优先级依次尝试以下方案:

  • 修正系统数字格式配置:打开控制面板-区域-其他设置,确认小数点符号设置为.,千位分隔符设置为,,不要使用中文标点、空格等特殊符号作为分隔符,保存后重启VS再运行代码验证。
  • 替换驱动版本:将项目引用的IBM.Data.Informix.dll替换为同事正常运行环境中同版本的DLL,不要使用本机GAC中注册的其他版本,重新添加引用后测试。
  • 绕开驱动内置的自动转换逻辑:不要直接用索引器取值,改用显式类型读取方法规避解析bug,代码示例:
' 先获取目标列的序号
Dim colIndex As Integer = myReader.GetOrdinal("decimalValue")
' 直接调用GetDecimal方法读取,跳过索引器的自动类型转换流程
Dim myVariable As Double = Convert.ToDouble(myReader.GetDecimal(colIndex))
  • 统一.NET运行时版本:检查项目目标框架版本是否和同事正常运行的环境一致,部分旧版Informix驱动在.NET Framework 4.7及以上版本中存在数值解析兼容问题,可以临时将项目目标框架调整为.NET Framework 4.5测试。
  • 排查干扰软件:临时退出本机安装的输入法增强、系统美化、全局快捷键类第三方软件,这类软件可能Hook系统默认的数字格式配置,导致驱动读取到错误的格式信息。

内容的提问来源于stack exchange,提问作者Waldi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:18:23