我在Oracle 10g上使用ODBC 3.0插入表中失败,我不明白为什么。该数据库位于Windows Server 2003上。客户端位于Windows XP上。
表格:
CREATE TABLE test ( testcol NUMBER(20,0) NULL );
ODBC调用:
SQLAllocHandle(SQL_HANDLE_STMT) = SQL_SUCCESS
SQLPrepare(INSERT INTO test (testcol) VALUES (?);) = SQL_SUCCESS
SQLINTEGER nStrLen = 0;
__int64 nInt64 = 99;
SQLBindParameter(hStatement, 1, SQL_PARAM_INPUT,
SQL_C_SBIGINT, SQL_BIGINT, 20, 0, &nInt64, 0, &nStrLen) = SQL_SUCCESS
SQLExecute() = SQL_ERROR
SQLGetDiagRec(1) = SQL_NO_DATA
SQLBindParameter
成功,但SQLExecute
失败。没有诊断信息。
我不得不求助于将int64写入字符串并将其绑定为字符串。这是绑定int64的唯一方法吗?
答案 0 :(得分:4)
Appendix G.1中的Oracle 10g管理员指南说,Oracle 10g ODBC驱动程序不支持 SQL_C_SBIGINT
或SQL_C_UBIGINT
。
与您一样,我们也发现在运行时SQLExecute()
失败。而对SQLGetDiagRec()
的调用则不会返回任何内容,而不是像"Oracle 10g does not support SQL_C_SBIGINT"
这样的简单消息。 GRR ....
无论如何,附录G.1没有说明 如何绑定数据以发送到具有定义为NUMBER(20)
的列的表中。所以我们都必须猜测,并使用任何(未记录的)技术。如果附录G.1对“最佳”方式提出某种暗示或建议,那就太好了。
如果将数字转换为字符串,然后绑定适合您,请坚持下去。