SQL Server Native Client 中的 ISSAsynchStatus::WaitForAsynchCompletion (OLE DB)

適用於: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 OLE DB 提供者 (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的開發。 請切換至新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 以繼續使用。

等到非同步執行的作業完成或發生逾時為止。

語法

  
HRESULT WaitForAsynchCompletion(   
        DWORD dwMillisecTimeOut);  

引數

dwMillisecTimeOut[in]
逾時 (以毫秒為單位)。

傳回碼值

S_OK
此方法已成功。

E_UNEXPECTED
資料列集處於未使用狀態,因為 已呼叫 ITransaction::Commit ITransaction::Abort ,或在初始化階段取消資料列集。

DB_E_CANCELED
資料列集母體擴展或資料來源物件初始化期間,非同步處理已取消。

DB_S_ASYNCHRONOUS
即使已經達到指定的逾時,此作業還是尚未完成。

注意

除了以上列出的傳回碼值,ISSAsynchStatus::WaitForAsynchCompletion 方法也支援透過核心 OLEDB ICommand::ExecuteIDBInitialize::Initialize 方法所傳回的傳回碼值。

備註

在逾時值 (以毫秒為單位) 已過,或暫止的作業完成前,ISSAsynchStatus::WaitForAsynchCompletion 方法將不會傳回。 Command 物件的 CommandTimeout 屬性會控制查詢在逾時前執行的秒數。如果搭配 ISSAsynchStatus::WaitForAsynchCompletion 方法使用,將會忽略 CommandTimeout 屬性。

非同步作業會忽略逾時屬性。 ISSAsynchStatus::WaitForAsynchCompletion 的逾時參數會指定將控制項傳回給呼叫端前經過的時間上限。 如果這個逾時過期,會傳回 DB_S_ASYNCHRONOUS。 逾時絕不會取消非同步作業。 如果應用程式需要取消沒有在逾時期間內完成的非同步作業,它必須等到逾時,然後明確地取消此作業 (如果有傳回 DB_S_ASYNCHRONOUS)。

注意

使用 OLE DB 服務元件時,如果為 DB_S_ASYNCHRONOUS,可能會傳回 S_OK;因此,應用程式應該呼叫 ISSAsynchStatus::GetStatus 來檢查傳回 S_OK 或 DB_S_ASYNCHRONOUS 時,作業是否完成。

如果 dwMillisecTimeOut 值設定為 INFINITE,ISSAsynchStatus::WaitForAsynchCompletion 方法會封鎖,直到作業完成為止。 如果 dwMillisecTimeOut 值設定為 0,則方法將會立即傳回暫止之作業的狀態。 如果逾時在作業完成之前到期,則會傳回DB_S_ASYNCHRONOUS。

如果作業在逾時過期前完成,傳回的 HRESULT 將會是此作業所傳回的 HRESULT (已經傳回的 HRESULT 已經讓此作業以同步方式執行)。

此外,SSPROP_ISSAsynchStatus 屬性已加入到 DBPROPSET_SQLSERVERROWSET 屬性集。 支援 ISSAsynchStatus 介面的提供者必須使用 VARIANT_TRUE 的值實作此屬性。

另請參閱

執行非同步作業
ISSAsynchStatus (OLE DB)