将SQLFetch()与SQL_C_FLOAT一起使用时,“数值超出范围”错误

时间:2011-06-05 12:26:54

标签: c++ sql-server odbc

我有2台电脑。

安装了Windows Server 2003和SQL Server 2000的第一个(A)。此计算机上存在一个数据库。此数据库使用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上运行。

数据库不是由我创建的,我根本不是数据库专家。希望你能帮助我。

感谢。

P.S。当我使用SQL_C_CHAR获取值时,一切正常。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。

Windows 7 64位。 SQL Server 2008 64位。

尝试在数据库的十进制字段上使用SQL_C_DOUBLE执行SQLGetData。

我认为SQL Native Client Driver存在问题。

在32位Windows 7上,它可以正常工作

在具有MDAC驱动程序的64位Windows 7上,它可以正常工作

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

虽然这需要额外的可再发行组件,但我将测试和分发SQL 2008 R2

答案 1 :(得分:0)

我不知道这是不是你的问题,但我个人从不在我的C代码中使用float数据类型。值得一试:

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