共用方式為


非同步模式和 SQLCancel

某些 ODBC 函數可以透過同步或非同步方式來操作。應用程式可以針對陳述式控制代碼或連接控制代碼來啟用非同步作業。如果針對連接控制代碼來設定此選項,它會影響連接控制代碼上的所有陳述式控制代碼。應用程式會使用以下陳述式來啟用或停用非同步作業:

SQLSetConnectAttr(hdbc, SQL_ATTR_ASYNC_ENABLE,
                        SQL_ASYNC_ENABLE_ON, SQL_IS_INTEGER);
SQLSetConnectAttr(hdbc, SQL_ATTR_ASYNC_ENABLE,
                        SQL_ASYNC_ENABLE_OFF, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ASYNC_ENABLE,
                        SQL_ASYNC_ENABLE_ON, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ASYNC_ENABLE,
                        SQL_ASYNC_ENABLE_OFF, SQL_IS_INTEGER);

當應用程式在同步模式下呼叫 ODBC 函數時,此驅動程式要等到被通知伺服器已經完成命令之後,才會將控制權送回應用程式。

當以非同步方式操作時,此驅動程式會立即將控制權送回應用程式,即使是在傳送命令給伺服器以前。此驅動程式會將傳回碼設定為 SQL_STILL_EXECUTING。然後應用程式可以執行其他工作。

當應用程式測試是否完成命令時,它會使用相同的驅動程式參數來進行相同的函數呼叫。如果此驅動程式尚未收到伺服器的回應,它將會再次傳回 SQL_STILL_EXECUTING。應用程式必須定期測試命令,直到程式碼為 SQL_STILL_EXECUTING 以外的項目為止。當應用程式取得某個其他傳回碼 (甚至是 SQL_ERROR) 時,它可以判斷出命令已經完成。

有時命令會持續一段很長的時間未處理。如果應用程式需要取消命令而不等候回覆,它可以使用相同的陳述式控制代碼當做未處理命令呼叫 SQLCancel 來進行這項處理。這是唯一應該使用 SQLCancel 的時機。當某些程式設計人員已經處理部分結果集,而且想要取消結果集的其餘部分時,他們會使用 SQLCancel。應該使用 SQLMoreResultsSQLCloseCursor 來取消未處理結果集的其餘部分,而不是使用 SQLCancel