建立驅動程式應用程式 - 異步模式和 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 ,並想要取消結果集的其餘部分。 SQLMoreResults 或 SQLCloseCursor 應該用來取消未完成結果集的其餘部分,而不是 SQLCancel。