Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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
Odbc 在没有SQLPrepare的情况下,我可以在SQLFreeStmt之后调用SQLExecute吗?_Odbc - Fatal编程技术网

Odbc 在没有SQLPrepare的情况下,我可以在SQLFreeStmt之后调用SQLExecute吗?

Odbc 在没有SQLPrepare的情况下,我可以在SQLFreeStmt之后调用SQLExecute吗?,odbc,Odbc,我有以下代码调用序列: SQLPrepare SQLExecute(hstmt, SQL_CLOSE); SQLFreeStmt //It works till here SQLExecute //Now it fails. 为什么我需要再次调用SQLPrepare,我刚刚释放了游标。我不应该再准备SQL语句了。SQLFreeStmt(hstmt,SQL\u CLOSE)清除了与该语句句柄有关的所有内容,请查看: SQLFreeStmt停止处理 与特定语句关联, 关闭所有打开的关联游标 对于该

我有以下代码调用序列:

SQLPrepare
SQLExecute(hstmt, SQL_CLOSE);
SQLFreeStmt
//It works till here
SQLExecute //Now it fails.
为什么我需要再次调用SQLPrepare,我刚刚释放了游标。我不应该再准备SQL语句了。

SQLFreeStmt(hstmt,SQL\u CLOSE)清除了与该语句句柄有关的所有内容,请查看:

SQLFreeStmt停止处理 与特定语句关联, 关闭所有打开的关联游标 对于该语句,放弃挂起的 结果,或(可选)释放所有 与 语句句柄


如果不想再次使用
SQLPrepare
,可以改用
SQLExecDirect

正确的行为是SQLPrepare/SQLExecute/SQLFreStmt(stmt,SQL\u CLOSE)应该允许在同一stmt句柄上执行另一个SQLExecute,而无需重新准备。您可以在《ODBC程序员指南》中将其视为有效的状态转换。如果执行了SQLPrepare(sql)并仅获取了部分行(而不是全部行),则可以使用此序列,因为没有SQLFreeStmt(stmt,sql\u CLOSE)或获取,直到返回sql\u NO\u数据为止。如果发出另一个SQLExecute,则将获得无效的游标状态。SQLFreeStmt(stmt,SQL_DROP)相当于SQLfreehold(SQL_handlestm,stmt)并释放整个stmt句柄,这意味着您根本无法再次使用它。

但是对于Oracle数据库,SQLExecute在SQLFreeStmt之后工作,所以我想知道它是否是标准的,其他ODBC驱动程序的行为是什么。SQLExecDirect不是一个选项,也不是我的问题。我只是想知道什么是正确的行为。