【问题标题】:How to read numeric/decimal/money columns from SQL Server?如何从 SQL Server 读取数字/十进制/货币列?
【发布时间】:2012-02-08 14:25:01
【问题描述】:

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

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多