c++浮点到sql服务器DECIMAL的正确转换
c++ float to sql server DECIMAL correct conversion
我正在使用odbc在本机c++中创建一个应用程序。我正在调用一个具有十进制参数的sql server存储过程。我正在向该参数传递一个浮点值。到目前为止的代码:
SQLDECIMAL *sql_param = new SQLDECIMAL( param);
if( SQL_ERROR == ( result = SQLBindParameter( statement_handle, 5, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_DECIMAL, 12, 6, sql_param, 0, NULL ) ) ){
std::wstring error = get_error_message( SQL_HANDLE_STMT, statement_handle );
throw GenericException( error );
}
param是一个浮点值。
存储在表上的总是0,而不是1.45的实际值。我猜正在进行一些转换,但我无法找出正确的转换。SQL_C_FLOAT->SQL_DECIMAL?
在参考中:
SQLRETURN SQLBindParameter(
SQLHSTMT StatementHandle,
SQLUSMALLINT ParameterNumber,
SQLSMALLINT InputOutputType,
SQLSMALLINT ValueType,
SQLSMALLINT ParameterType,
SQLULEN ColumnSize,
SQLSMALLINT DecimalDigits,
SQLPOINTER ParameterValuePtr,
SQLLEN BufferLength,
SQLLEN * StrLen_or_IndPtr);
...
BufferLength
[Input/Output] Length of the ParameterValuePtr buffer in bytes.
您已将BufferLength
指定为零。在这里,您可以看到不同精度值的小数长度:
Precision StorageBytes
1-9 5
10-19 9
20-28 13
29-38 17
因此,您需要将方法SQLBindParameter
调用为:
SQLBindParameter( statement_handle, 1, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_DECIMAL, 12, 6, sql_param, 5, NULL )
SQLDECIMAL是您的问题。根据http://publib.boulder.ibm.com/infocenter/soliddb/v6r3/index.jsp?topic=/com.ibm.swg.im.soliddb.programmer.doc/doc/s0005314.c.data.types.html它是一个无符号的char[f]。我建议:
void bind_float(float* param) {
SQLBindParameter( statement_handle, 5, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_DECIMAL, 12, 6, param, 0, NULL ) ) );
}
我拿到了。它不应该是:
SQLDECIMAL *sql_param = new SQLDECIMAL( param );
应该是:
SQLDECIMAL *sql_param = (SQLDECIMAL *) param;
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 使用char类型将decimal转换为string,将string转换为decimal
- c++浮点到sql服务器DECIMAL的正确转换
- 编写一个函数,从数组中提取8位,并将其转换为Decimal