在Oracle 10g中执行绑定int64(SQL_BIGINT)会导致错误ODBC
问题描述:
我已经在Oracle 10g上使用ODBC 3.0插入表,并且我不知道为什么。数据库位于Windows Server 2003上。客户端位于Windows XP上。在Oracle 10g中执行绑定int64(SQL_BIGINT)会导致错误ODBC
表:
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的管理员指南在Appendix G.1说,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给出了某种关于“最佳”方式的暗示或建议,那将是很好的。
如果将数字转换为字符串,然后绑定适用于您,请坚持。
从绑定SQL_C_SBIGINT变量的select语句中获取数据时,我遇到了类似的失败。该错误消息更具描述性,但仍不很有用:SQLSTATE = HY004,“无效的SQL数据类型”。 – 2010-07-15 17:19:54
我得到HY004以及Oracle的11.2 ODBC驱动程序。将尝试字符串... argh ... – bneal 2011-01-20 23:23:47