我有 2 台电脑。
第一个 (A) 安装了 Windows Server 2003 和 SQL Server 2000。此计算机上存在一个数据库。此数据库已添加到具有 SQLServer 驱动程序版本 - 2000.85.1022 的 ODBC 数据源。
第二个 (B) 使用 Windows 7 64 位。来自计算机 A 的数据库也通过 SQLServer Native Client 添加到 ODBC 数据源。驱动程序版本 - 2007.100.1600.22。
我有一个使用 ODBC 数据源连接到数据库、检索一些数据并执行计算的软件。代码如下:
wsprintf ((LPSTR)m_stmt,"select field1 from MyTable Order by field1");
float field1Val;
SQLExecDirectEx(m_hstmt,m_stmt,SQL_NTS);
SQLBindCol(m_hstmt, 1, SQL_C_FLOAT, &field1Val, 0, &cbCustID);
m_retcode = SQLFetch(m_hstmt);
当我在计算机 A 上调用此软件时,一切正常。 当我在计算机 B 上调用它时,连接执行良好,但在使用 SQLFetch() 后,我收到“数值超出范围”错误 (22003)。
field1 在数据库中声明为十进制 9(18:2)。存储的值为“0.50”
那么问题是如何让它在计算机B上运行。
数据库不是我创建的,我也不是数据库专家。所以希望你能帮助我。
谢谢。
附注当我使用 SQL_C_CHAR 获取值时,一切正常。
最佳答案
我遇到了同样的问题。
Windows 7 64 位。 SQL Server 2008 64 位。
尝试在数据库中的 Decimal 字段上使用 SQL_C_DOUBLE 执行 SQLGetData。
我推测 SQL Native Client 驱动程序有问题。
在 32 位 Windows 7 上运行良好
在带有 MDAC 驱动程序的 64 位 Windows 7 上它工作正常
我最终的解决方案是安装 SQL Server 2008 R2 Native Client 驱动程序。
尽管这需要额外的可再分发,但我将改为测试和分发 SQL 2008 R2
关于c++ - 将 SQLFetch() 与 SQL_C_FLOAT 一起使用时出现 "Numeric value out of range"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6242895/