Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将int64(SQL_BIGINT)绑定为查询参数会导致在Oracle 10g ODBC中执行时出错_Oracle_Odbc_Oracle10g - Fatal编程技术网

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

将int64(SQL_BIGINT)绑定为查询参数会导致在Oracle 10g ODBC中执行时出错,oracle,odbc,oracle10g,Oracle,Odbc,Oracle10g,我在Oracle10g上使用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_S

我在Oracle10g上使用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管理指南》指出,Oracle 10g ODBC驱动程序不支持
SQL\u C\u SBIGINT
SQL\u C\u UBIGINT

与您一样,我们也发现在运行时,
SQLExecute()
失败。调用
SQLGetDiagRec()
不返回任何内容,而不是像
这样的简单消息“Oracle 10g不支持SQL\u C\u SBIGINT”
。Grr

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


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

+1出于对SQLGetDiagRec()中糟糕的遗漏的遗憾。当使用绑定的SQL\u C\u SBIGINT变量从select语句中获取数据时,我也遇到了类似的失败。错误消息更具描述性,但仍然没有太大帮助:SQLSTATE=HY004,“无效的SQL数据类型”。我也得到了HY004,使用Oracle的11.2 ODBC驱动程序。将尝试字符串…啊。。。