我正在尝试检索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)