gpt4 book ai didi

c++ - DB2 十进制字段从 OLEDB 返回为负 DBTYPE_NUMERIC

转载 作者:太空宇宙 更新时间:2023-11-04 13:01:39 25 4
gpt4 key购买 nike

使用 C++ 中的 OLEDB,我从 DB2 中获取 DBTYPE_NUMERIC 用于十进制字段,并像这样转换为 DECIMAL(省略错误检查):

...
CDynamicAccessor* pAccessor = GetAccessor();
...
DBTYPE dbT=0;
pAccessor->GetColumnType(nIndex, &dbT);
if (dbT == DBTYPE_NUMERIC)
{
DB_NUMERIC* pNum = (DB_NUMERIC*)pAccessor->GetValue(nIndex);
DECIMAL dec;
DECIMAL_SETZERO(dec);
dec.sign = pNum->sign; // <--this comes back as 1 for positive fields and 0 for negative
dec.scale = pNum->scale;
memcpy(&dec.Hi32, pNum->val + 8, 4);
memcpy(&dec.Lo64, pNum->val, 8);
....
}

我不明白的是,为什么 DB_NUMERIC::sign 在 DB2 中对于正十进制字段返回 1 而对于负十进制字段返回 0。这是正确的行为吗?根据定义 here它与 DECIMAL 相反 - 0 应该是正数。它是数据库/字段设置吗?在数据库中,一切看起来都是积极的。如果我将 db 中的值设置为负值,它会返回正值。因此,符号在返回的 DB_NUMERIC 结构中为正数打开,为负数关闭。这似乎与预期相反。怎么了?顺便说一句:我在 oledb.h 中的任何地方都找不到关于 DB_NUMERIC 的任何文档。请帮忙。非常感谢!

最佳答案

在 MSDN 中找到了一个晦涩的文档,该文档确认 DB_NUMERIC 和 DECIMAL 以几乎相反的方式处理符号。

关于c++ - DB2 十进制字段从 OLEDB 返回为负 DBTYPE_NUMERIC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43942117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com