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

安装KB5019959后SQLGetData函数无法正常工作的问题求助

问题解决方案

这个问题是Windows更新KB5019959调整了ODBC驱动对float(SQL_FLOAT)到double(SQL_C_DOUBLE)的转换逻辑,打破了之前的兼容行为。以下是几个无需大量重构的解决思路:

  • 局部修改GetValue函数,兼容SQL_FLOAT列
    不用改动所有调用处,仅在该函数内部判断列类型,针对SQL_FLOAT做特殊处理:

    bool CDataAccess::GetValue(UINT col, double& value)
    {
        SQLSMALLINT sqlType;
        // 获取当前列的SQL原生类型
        SQLColAttribute(m_hstmt, col, SQL_DESC_TYPE, nullptr, 0, nullptr, &sqlType);
        
        if (sqlType == SQL_FLOAT) {
            float tempVal;
            int retCode = SQLGetData(m_hstmt, col, SQL_C_FLOAT, &tempVal, 0, &m_cbValue);
            value = static_cast<double>(tempVal);
        } else {
            int retCode = SQLGetData(m_hstmt, col, SQL_C_DOUBLE, &value, 0, &m_cbValue);
        }
        // 保留原有的错误处理等逻辑
        ...
    }
    

    所有调用该函数获取double值的代码都无需修改,仅需调整这一处即可。

  • 切换到独立SQL Server ODBC驱动
    系统自带的ODBC驱动可能被KB5019959修改,你可以安装官方独立驱动(比如ODBC Driver 17或18 for SQL Server),并在连接字符串中指定使用该驱动,避开系统更新带来的影响。

  • 向微软提交问题反馈
    既然卸载更新即可恢复正常,说明这是更新引入的兼容性bug。你可以通过微软反馈中心提交详细的场景、代码和复现步骤,推动微软在后续更新中修复该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:20:42