"Numeric value out of range" 将 SQLFetch() 与 SQL_C_FLOAT 一起使用时出错

"Numeric value out of range" error when using SQLFetch() with SQL_C_FLOAT

本文关键字:FLOAT 一起 出错 SQL out value Numeric of range SQLFetch      更新时间:2023-10-16

我有两台电脑。

第一个(A)安装了Windows Server 2003和SQL Server 2000。这台计算机上存在一个数据库。此数据库添加到ODBC数据源中,SQL Server驱动程序版本为-2000.85.1022。

第二个(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上工作。

数据库不是我创建的,我也不是数据库专家。所以希望你能帮助我。

谢谢。

p.s.当我使用SQL_C_CHAR获取值时,一切都很好。

我也遇到了同样的问题。

Windows 7 64位。SQL Server 2008 64位。

正在尝试对数据库中的Decimal字段使用SQL_C_DOUBLE执行SQLGetData。

我认为SQL本机客户端驱动程序有问题。

在32位Windows7上,运行良好

在带有MDAC驱动程序的64位Windows7上,运行良好

对我来说,最终的解决方案是安装SQL Server 2008 R2 Native Client驱动程序。

尽管这需要一个额外的可再分发程序,但我将测试并分发SQL 2008 R2,而不是

我不知道这是否是你的问题,但我个人不会在我的C代码中使用浮点数据类型。这可能值得一试:

double field1Val;
SQLBindCol(m_hstmt, 1, SQL_C_DOUBLE, &field1Val, 0, &cbCustID);