bro*_*eld 4 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 的唯一方法吗?
在Oracle 10g的管理员指南在附录G.1说,Oracle 10g的ODBC驱动程序不支持任一SQL_C_SBIGINT或SQL_C_UBIGINT。
像您一样,我们也发现在运行时SQLExecute()失败。并且对 的调用不SQLGetDiagRec()返回任何内容,而不是像"Oracle 10g does not support SQL_C_SBIGINT". 咕....
无论如何,附录 G.1 没有说明您应该如何绑定数据以发送到一个表中,列定义为NUMBER(20)。所以我们都必须猜测,并使用任何(未记录的)技术工作。如果附录 G.1 就“最佳”方式给出了某种提示或建议,那就太好了。
如果将数字转换为字符串然后绑定对您有用,请坚持下去。