如何从SQL Server读取数字/十进制/货币列?

时间:2012-02-07 15:25:44

标签: sql-server visual-c++ odbc

我尝试通过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 。所以分数部分被简单地丢弃了,原因很奇怪。

我可以做错什么?

1 个答案:

答案 0 :(得分:0)

好的,this article解释了这个问题。解决方案非常繁琐,我决定完全避免使用SQL_NUMERIC_STRUCT,受this post的影响。现在我指定SQL_C_WCHARSQL_C_CHAR也会这样做)并直接读取数字/十进制/货币列作为文本字符串。看起来驱动程序会进行转换。