SQLCompleteAsync 函数

一致性
引入的版本:ODBC 3.8 标准符合性:无

摘要
SQLCompleteAsync 可用于使用基于通知或基于轮询的处理来确定异步函数何时完成。 有关异步操作的详细信息,请参阅 异步执行

SQLCompleteAsync 仅在 ODBC 驱动程序管理器中实现。

在基于通知的异步处理模式下,必须在驱动程序管理器引发用于通知的事件对象后调用 SQLCompleteAsyncSQLCompleteAsync 完成异步处理,异步函数将生成返回代码。

在基于轮询的异步处理模式下, SQLCompleteAsync 是调用原始异步函数的替代方法,无需在原始异步函数调用中指定参数。 无论是否启用了 ODBC 游标库,都可以使用 SQLCompleteAsync

语法

  
SQLRETURN SQLCompleteAsync(  
      SQLSMALLINT HandleType,  
      SQLHANDLE   Handle,  
      RETCODE *   AsyncRetCodePtr);  

参数

HandleType
[输入]要完成异步处理的句柄的类型。 有效值为SQL_HANDLE_DBC或SQL_HANDLE_STMT。

Handle
[输入]要对其完成异步处理的句柄。 如果 Handle 不是 HandleType 指定的类型的有效句柄, 则 SQLCompleteAsync 返回SQL_INVALID_HANDLE。

如果 Handle 不是 HandleType 指定的类型的有效句柄, 则 SQLCompleteAsync 返回SQL_INVALID_HANDLE。

AsyncRetCodePtr
[输出]指向将包含异步 API 的返回代码的缓冲区的指针。 如果 AsyncRetCodePtr 为 NULL, 则 SQLCompleteAsync 返回SQL_ERROR。

返回

SQL_SUCCESS、SQL_ERROR、SQL_NO_DATA 或 SQL_INVALID_HANDLE。

诊断

如果 SQLCompleteAsync 返回SQL_SUCCESS,则应用程序应从 AsyncRetCodePtr 指向的缓冲区获取异步函数的返回代码。 可以通过调用 SQLGetDiagRec 来获取关联的 SQLSTATE(如果有),该 SQLGetDiagRecHandleType 为 SQL_HANDLE_STMT,语句句柄或 handleType 为 SQL_HANDLE_DBC 和连接句柄。 这些诊断记录与异步函数(而不是此 SQLCompleteAsync 函数) 相关联。

SQLCompleteAsync 返回SQL_SUCCESS以外的代码,指示未正确调用 SQLCompleteAsync 。 在这种情况下,SQLCompleteAsync 不会发布任何诊断记录。 可能的返回代码包括:

  • SQL_INVALID_HANDLE: HandleType 和 Handle 指示的 句柄 不是有效的句柄。

  • SQL_ERROR: AsyncRetCodePtr 为 NULL 或未在句柄上启用异步处理。

  • SQL_NO_DATA:在通知模式下,异步操作未进行,或者驱动程序管理器未通知应用程序。 在轮询模式下,异步操作未进行。

注释

在基于轮询的异步处理模式下,当 SQLCompleteAsync 返回SQL_SUCCESS时,可能会SQL_STILL_EXECUTING AsyncRetCodePtr。 应用程序应一直轮询,直到 AsyncRetCodePtr 未SQL_STILL_EXECUTING。 在基于通知的异步处理模式下, 永远不会SQL_STILL_EXECUTING AsyncRetCodePtr

另请参阅

异步执行 (轮询方法)