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

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

重要

SQL Server Native Client (通常縮寫為 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 開發新的應用程式。 往後請改用新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新的 Microsoft ODBC Driver for SQL Server。 如需 SQL Server 資料庫引擎元件隨附的 SQLNCLI(版本 2012 到 2019),請參閱此 支援生命週期例外狀況

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

另請參閱

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