"Numeric value out of range" 将 SQLFetch() 与 SQL_C_FLOAT 一起使用时出错
"Numeric value out of range" error when using SQLFetch() with SQL_C_FLOAT
我有两台电脑。
第一个(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);
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何获取float地址以与memcpy一起使用