将int64(SQL_BIGINT)绑定为查询参数会导致在Oracle 10g ODBC中执行期间出错

时间:2008-12-03 20:39:10

标签: oracle odbc oracle10g

我在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的唯一方法吗?

1 个答案:

答案 0 :(得分:4)

Appendix G.1中的Oracle 10g管理员指南说,Oracle 10g ODBC驱动程序不支持 SQL_C_SBIGINTSQL_C_UBIGINT

与您一样,我们也发现在运行时SQLExecute()失败。而对SQLGetDiagRec()的调用则不会返回任何内容,而不是像"Oracle 10g does not support SQL_C_SBIGINT"这样的简单消息。 GRR ....

无论如何,附录G.1没有说明 如何绑定数据以发送到具有定义为NUMBER(20)的列的表中。所以我们都必须猜测,并使用任何(未记录的)技术。如果附录G.1对“最佳”方式提出某种暗示或建议,那就太好了。

如果将数字转换为字符串,然后绑定适合您,请坚持下去。