我尝试通过ODBC以下列方式从SQL Server读取数字/十进制/货币列:
SQL_NUMERIC_STRUCT decimal;
SQLGetData(hSqlStmt, iCol, SQL_C_NUMERIC, &decimal, sizeof(decimal), &indicator);
所有这些类型都以SQL_NUMERIC_STRUCT结构的形式返回,我将SQL_C_NUMERIC类型指定为SQLGetData()API。
在数据库中,列例如定义为decimal(18, 4)
,或money
。但问题是返回的数据decimal.precision
始终设置为38(最大可能值),decimal.scale
始终设置为零。因此,如果实际存储的数字是 12.65 ,则SQL_NUMERIC_STRUCT结构中返回的值等于 12 。所以分数部分被简单地丢弃了,原因很奇怪。
我可以做错什么?
答案 0 :(得分:0)
好的,this article解释了这个问题。解决方案非常繁琐,我决定完全避免使用SQL_NUMERIC_STRUCT
,受this post的影响。现在我指定SQL_C_WCHAR
(SQL_C_CHAR
也会这样做)并直接读取数字/十进制/货币列作为文本字符串。看起来驱动程序会进行转换。