SQLGetData 在安装后的工作方式不同KB5019959



我正在尝试检索float值从SQL Server数据库转换为双变量,我使用以下代码:

bool CDataAccess::GetValue(UINT col, double& value)
{
int retCode = SQLGetData(m_hstmt, col, SQL_C_DOUBLE, &value, 0, &m_cbValue);
...
}

这段代码在上周安装Windows更新KB5019959之前一直运行良好;如果我卸载这个更新,一切都可以正常工作了。

如果我使用SQL_C_FLOAT作为参数或将列类型更改为double,它可以工作,但这种更改将带来巨大的重构…

在驱动程序的后续版本中,当0作为值传递时,如何使用double处理BufferLength的行为似乎可能发生变化。0曾经可以工作,但不再为默认驱动程序。

下面的代码将返回我测试的正确数据:

SQLDOUBLE value;
SQLLEN lengthIndicator = 0;
SQLRETURN r;
r = SQLGetData(hstmt, col, SQL_C_DOUBLE, &value, sizeof(value), &lengthIndicator);

注意:sizeof(value)被传递为BufferLength,而0

之前一样我们在QGIS中遇到了同样的错误,实施上述修复已经解决了这个问题(https://github.com/qgis/QGIS/issues/50865)

相关内容

  • 没有找到相关文章

最新更新