傳回異步執行作業的狀態。
語法
HRESULT GetStatus(
HCHAPTER hChapter,
DBASYNCHOP eOperation,
DBCOUNTITEM *pulProgress,
DBCOUNTITEM *pulProgressMax,
DBASYNCHPHASE *peAsynchPhase,
LPOLESTR *ppwszStatusText);
論點
hChapter[in]
章節句柄。 如果所輪詢的物件不是數據列集物件,或作業不適用於章節,則這應該設定為 DB_NULL_HCHAPTER,提供者會忽略此物件。
eOperation[in]
要求異步狀態的作業。 這應該是下列值:
DBASYNCHOP_OPEN-The 取用者會要求有關數據列集異步開啟或母體擴展的資訊,或有關數據源物件的異步初始化。 如果提供者是支援直接 URL 系結的 OLE DB 2.5 相容提供者,取用者會要求數據源、數據列集、數據列或數據流物件之異步初始化或母體擴展的相關信息。
pulProgress[out]
記憶體指標,用來傳回異步作的目前進度,相對於 pulProgressMax 參數中所指示的預期最大值。 如需 pulProgress 意義的詳細資訊,請參閱 peAsynchPhase 的描述。
如果 pulProgress 是 Null 指標,則不會傳回任何進度。
pulProgressMax[out]
要在其中傳回 pulProgress 參數預期最大值的記憶體指標。 這個值可能會在對此方法的呼叫之間變更。 如需 pulProgressMax 意義的詳細資訊,請參閱 peAsynchPhase 的描述。
如果 pulProgressMax 是 Null 指標,則不會傳回預期的最大值。
peAsynchPhase[out]
記憶體指標,用來傳回異步作進度的其他資訊。 有效值包括:
DBASYNCHPHASE_INITIALIZATION-The 對象處於初始化階段。 pulProgress 和 pulProgressMax 自變數表示完成的估計比率。 物件尚未完全具體化。 嘗試呼叫任何其他介面可能會失敗,而且物件上可能無法使用完整的介面集。 如果異步作是針對更新、刪除或插入數據列的命令呼叫 ICommand::Execute 的結果,而且如果 cParamSets 大於 1,pulProgress 和 pulProgressMax 可能會指出單一參數集或參數集完整數位的進度。
DBASYNCHPHASE_POPULATION-The 對象處於母體階段。 雖然數據列集已完全初始化,而且物件上提供完整的介面範圍,但數據列集可能尚未填入其他數據列。 雖然 pulProgress 和 pulProgressMax 可以根據所填入的數據列數目,但一般是以填入數據列集所需的時間或精力為基礎。 因此,呼叫端應該使用這項資訊來粗略估計程式可能需要多久時間,而不是最終的數據列計數。 此階段只會在數據列集母體擴展期間傳回;在數據源物件的初始化中,或藉由執行更新、刪除或插入數據列的命令,永遠不會傳回它。
DBASYNCHPHASE_COMPLETE-All 對象的異步處理已完成。 ISSAsynchStatus::GetStatus 會傳回 HRESULT,指出作業的結果。 一般而言,如果作業以同步方式呼叫,就會傳回的 HRESULT。 如果異步作是針對更新、刪除或插入數據列的命令呼叫 ICommand::Execute 的結果,pulProgress 和 pulProgressMax 會等於受命令影響的數據列總數。 如果 cParamSets 大於 1,這是執行中指定之所有參數集所影響的數據列總數。 如果 peAsynchPhase 是 Null 指標,則不會傳回任何狀態代碼。
已中止物件的 DBASYNCHPHASE_CANCELED-Asynchronous 處理。 ISSAsynchStatus::GetStatus 會傳回DB_E_CANCELED。 如果異步作是針對更新、刪除或插入數據列的命令呼叫 ICommand::Execute 的結果, 則 pulProgress 等於所有參數集在取消前受命令影響的數據列總數。
ppwszStatusText[in/out]
記憶體指標,其中包含作業的其他資訊。 提供者可以使用此值來區分作業的不同元素,例如,要存取的不同資源。 此字串會根據數據源物件上的 DBPROP_INIT_LCID 屬性進行當地語系化。
如果 輸入上的 ppwszStatusText 為非 Null,提供者會傳回與 ppwszStatusText 所識別之特定元素相關聯的狀態。 如果 ppwszStatusText 未指出 eOperation 的元素,提供者會傳回S_OK ,並將 pulProgress和 pulProgressMax 設定為相同的值。 如果提供者不會根據文字標識符區分元素,它會將 ppwszStatusText 設定為NULL,並傳回整個作業的相關信息:否則,如果 輸入上的ppwszStatusText 為非 Null,提供者會保留 ppwszStatusText 未變更。
如果 輸入上的 ppwszStatusText 為 Null,提供者會將 ppwszStatusText 設定為值,指出作業的詳細資訊,如果沒有這類資訊,或 ISSAsynchStatus::GetStatus 傳回錯誤,則為 NULL。 當 輸入上的ppwszStatusText 為 null時,提供者會配置狀態字串的記憶體,並將位址傳回給這個記憶體。 取用者會在不再需要字串時,使用 IMalloc::Free 釋放此記憶體。
如果輸入上的 ppwszStatusText 為 NULL,則不會傳回任何狀態字串,而且提供者會傳回作業的任何專案或一般作業的相關信息。
傳回碼值
S_OK
方法已成功傳回。
如果 peAsynchPhase 等於DBASYNCHPHASE_INITIALIZATION,則物件尚未完全初始化;嘗試呼叫任何其他介面可能會失敗,而且物件上可能無法使用完整的介面集。
如果 peAsynchPhase 等於DBASYNCHPHASE_POPULATION,則會完整初始化數據列集,而且物件上可以使用完整的介面範圍;不過,可能會有其他數據列尚未填入數據列集。
如果 peAsynchPhase 等於DBASYNCHPHASE_COMPLETE,則物件的所有異步處理都已完成。 物件已完整初始化並填入。
DB_E_CANCELED
數據列集母體擴展期間已取消異步處理。 母體擴展會停止,但數據列集仍然對已填入的數據列有效。
數據源物件初始化期間已取消異步處理。 數據源物件處於未初始化的狀態。
E_INVALIDARG錯誤(無效參數)
hChapter 參數不正確。
E_UNEXPECTED
在數據源物件上呼叫 ISSAsynchStatus::GetStatus,而且數據源物件上尚未呼叫 IDBInitialize::Initialize。
ISSAsynchStatus::GetStatus 在數據列集上呼叫了 ITransaction::Commit 或 ITransaction::Abort,而且對象處於殭屍狀態。
ISSAsynchStatus::GetStatus 是在初始化階段異步取消的數據列集上呼叫。 數據列集處於殭屍狀態。
E_FAIL
發生提供者特定的錯誤。
備註
ISSAsynchStatus::GetStatus 方法的行為與 IDBAsynchStatus::GetStatus 方法完全相同,不同之處在於,如果數據源物件的初始化已中止,則會傳回E_UNEXPECTED而不是DB_E_CANCELED(雖然 ISSAsynchStatus::WaitForAsynchCompletion 會傳回DB_E_CANCELED)。 這是因為數據源物件不會在中止后處於一般殭屍狀態,因此可能會嘗試進一步初始化作業。
如果數據列集是以異步方式初始化或填入,則必須支援這個方法。
除了列出的傳回值之外, ISSAsynchStatus::GetStatus 還可以傳回起始異步作的方法傳回的任何 HRESULT,指出作業的成功或失敗。
某些異步作可能無法傳回「已完成」和「未完成」以外的任何狀態。 它們應該將 pulProgressMax 設定為 1 的值,表示其估計的全數據粒度,因此其答案會是 0/1 或 1/1。
提供者可能會在連續呼叫中變更 pulProgressMax ,甚至傳回比先前還小的比例,如果這反映任務的完成程度估計的改善。
提供者不有義務保證任何進一步的精確度,但在可能的合理完成估計的情況下,建議這樣做。 這類工作會改善使用者介面品質,因為此函式的主要用途可能是為使用者提供進度意見反應。 用戶滿意度會隨著對不可見且長時間執行的工作的意見反應品質而提高。
在初始化的數據源物件或填入的數據列集上呼叫 ISSAsynchStatus::GetStatus,或傳遞 DBASYNCHOP_OPEN 以外的 eOperation 值,會傳回 pulProgress 和 pulProgressMax 設定為相同值的S_OK。 如果在從執行更新、刪除或插入數據列的命令所建立的物件上呼叫 ISSAsynchStatus::GetStatus,pulProgress 和 pulProgressMax 都會指出受命令影響的數據列總數。