我有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获取值时,一切正常。
答案 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);