SQLCompleteAsync 函式

符合性
推出版本:ODBC 3.8 標準合規性:無

總結
SQLCompleteAsync 可用來判斷非同步函式是否完成,無論是透過通知或輪詢處理。 欲了解更多非同步操作資訊,請參見非同步執行。

SQLCompleteAsync 僅在 ODBC 驅動程式管理器中實作。

在基於通知的非同步處理模式下,必須在驅動程式管理器提出用於通知的事件物件後呼叫 SQLCompleteAsyncSQLCompleteAsync 完成非同步處理,非同步函式會產生回傳碼。

在基於輪詢的非同步處理模式中, SQLCompleteAsync 是呼叫原始非同步函式的替代方案,且無需在原始非同步函式呼叫中指定參數。 無論是否啟用 ODBC 游標函式庫,都可以使用 SQLCompleteAsync

Syntax

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

論點

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。

Diagnostics

SQLCompleteAsync 回傳 SQL_SUCCESS,應用程式應從 AsyncRetCodePtr 指向的緩衝區取得非同步函式的回傳碼。 相關的 SQLSTATE 可透過呼叫 SQLGetDiagRec 取得, HandleType 為 SQL_HANDLE_STMT 與語句 handle ,或 HandleType 為 SQL_HANDLE_DBC 與連線 handle 。 這些診斷記錄是與非同步函式相關聯,而非這個 SQLCompleteAsync 函式。

SQLCompleteAsync 回傳的代碼除了 SQL_SUCCESS 外,表示 SQLCompleteAsync 未正確呼叫。 在這種情況下,SQLCompleteAsync 不會發布任何診斷紀錄。 可能的退貨代碼有:

  • SQL_INVALID_HANDLE: HandleTypeHandle 所標示的句柄並非有效句柄。

  • SQL_ERROR: AsyncRetCodePtr 為 NULL,或是該句柄未啟用非同步處理。

  • SQL_NO_DATA:在通知模式下,非同步操作未進行或驅動程式管理器尚未通知該應用程式。 在輪詢模式下,非同步操作並未進行中。

評論

在基於輪詢的非同步處理模式下,當 SQLCompleteAsync 回傳 SQL_SUCCESS時,AsyncRetCodePtr 可能會被SQL_STILL_EXECUTING。 應用程式應該持續輪詢,直到 AsyncRetCodePtr 不再SQL_STILL_EXECUTING。 在基於通知的非同步處理模式下, AsyncRetCodePtr 永遠不會被SQL_STILL_EXECUTING。