共用方式為


建立驅動程式應用程式 - 異步模式和 SQLCancel

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW)

重要

SQL Server Native Client (SNAC) 未隨附:

  • SQL Server 2022 (16.x) 及更新版本
  • SQL Server Management Studio 19 與更新版本

不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的應用開發。

針對新專案,請使用下列其中一個驅動程式:

針對 SQL Server 資料庫引擎 (2012 到 2019 版) 的隨附元件 SQLNCLI,請參閱支援生命週期例外狀況

某些 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

另請參閱

建立 SQL Server Native Client ODBC 驅動程式應用程式