ALL,
根据this,最大整数值是无符号长整数。
所以,如果我有一个更大的值,唯一的方法是使用double,对吗?还是有另一种选择?
这是我的代码:
unsigned long id;
retcode = SQLPrepare( stmt, qry, SQL_NTS );
retcode = SQLExecute( stmt );
retcode = SQLFetch( stmt );
retcode = SQLGetData( stmt, 1, SQL_C_ULONG, &id, 0, &cbName );
(省略错误处理)
在这里,我在最后一行执行时出现“超出范围”错误。我认为这是因为id太大而无法存储在unsigned long中。
知道如何解决这个问题吗?
P.S。:我想保存14757395258967641292,即使unsigned long long
答案 0 :(得分:3)
有大量的整数库。有Boost.Multiprecision,你会对Integer Types感兴趣。 This Google搜索会显示各种类型。
答案 1 :(得分:0)
您不能使用double来存储整个值,您可以使用long。
答案 2 :(得分:0)
显然,DB中的值存储为有符号整数。所以改变了
retcode = SQLGetData( stmt, 1, SQL_C_ULONG, &id, 0, &cbName );
到
retcode = SQLGetData( stmt, 1, SQL_C_SLONG, &id, 0, &cbName );
解决了这个问题。
希望这会帮助别人。
对不起噪音,谢谢你的阅读。