4

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

4

1 回答 1

5

附录 G.1中的 Oracle 10g 管理指南说 Oracle 10g ODBC 驱动程序不支持或。SQL_C_SBIGINTSQL_C_UBIGINT

像您一样,我们也发现在运行时SQLExecute()失败。并且调用SQLGetDiagRec()什么也不返回,而不是像"Oracle 10g does not support SQL_C_SBIGINT". 呜呜……

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

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

于 2009-04-14T23:16:15.390 回答