一致性
推出版本:ODBC 3.8 标准合规性:无
总结
SQLCompleteAsync 可用于通过通知或轮询处理来判断异步函数是否完成。 有关异步操作的更多信息,请参见异步执行。
SQLCompleteAsync 仅在 ODBC 驱动管理器中实现。
在基于通知的异步处理模式下,驱动程序管理器在启动用于通知的事件对象后必须调用 SQLCompleteAsync 。 SQLCompleteAsync 完成异步处理,异步函数将生成返回码。
在基于轮询的异步处理模式下, SQLCompleteAsync 是调用原始异步函数的替代方案,无需在原始异步函数调用中指定参数。 无论是否启用 ODBC 光标库,都可以使用 SQLCompleteAsync。
Syntax
SQLRETURN SQLCompleteAsync(
SQLSMALLINT HandleType,
SQLHANDLE Handle,
RETCODE * AsyncRetCodePtr);
Arguments
HandleType
[输入]用于完成异步处理的句柄类型。 有效的数值是SQL_HANDLE_DBC或SQL_HANDLE_STMT。
处理
[输入]完成异步处理的手柄。 如果 Handle 不是 HandleType 指定的有效句柄类型, SQLCompleteAsync 返回 SQL_INVALID_HANDLE。
如果 Handle 不是 HandleType 指定的有效句柄类型, SQLCompleteAsync 返回 SQL_INVALID_HANDLE。
AsyncRetCodePtr
[输出]指向一个缓冲区,该缓冲区将包含异步API的返回码。 如果 AsyncRetCodePtr 为 NULL,SQLCompleteAsync 返回 SQL_ERROR。
Returns
SQL_SUCCESS、SQL_ERROR、SQL_NO_DATA或SQL_INVALID_HANDLE。
诊断
如果 SQLCompleteAsync 返回 SQL_SUCCESS,应用程序应从 AsyncRetCodePtr 指向的缓冲区获取异步函数的返回码。 相关的 SQLSTATE 可以通过调用 SQLGetDiagRec 获得, HandleType 为 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:在通知模式下,异步操作未进行或驱动程序管理器未通知应用程序。 在轮询模式下,异步操作不进行中。
Comments
在基于轮询的异步处理模式下,当SQLCompleteAsync返回SQL_SUCCESS时,AsyncRetCodePtr可能会被SQL_STILL_EXECUTING。 应用程序应持续轮询,直到 AsyncRetCodePtr 不再SQL_STILL_EXECUTING。 在基于通知的异步处理模式下, 异步RetCodePtr 永远不会被SQL_STILL_EXECUTING。