c++ - 将 SQLFetch() 与 SQL_C_FLOAT 一起使用时出现 "Numeric value out of range"错误

标签 c++ sql-server odbc

我有 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/

相关文章:

php - 插入参数超过 30 个字符时出错

c++ - c++中虚继承是什么

sql-server - 除非还指定了 TOP 或 FOR XML,否则 ORDER BY 子句无效

sql - 如何选择表格中除一列之外的所有列?

c# - 比较两个表中的数据,一个是Oracle,一个是SQL Server

php - 将数据从 PHP 表单发布到 File maker pro 12 服务器上的 File Maker 数据库

java - 如何在整个应用程序中使用一个数据库连接对象?

c++ - 在函数和子函数中调用相同的临界区

c++ - 如何在Linux下编译DEC UNIX v4.0应用程序源代码?

c++ 无法将指针数组初始化为 null c++