返回异步执行作的状态。
语法
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 是空指针,则不返回任何进度。
pulProgressMax[out]
指向内存的指针,用于返回 pulProgress 参数的预期最大值。 此值可能会在调用此方法时发生更改。 有关 pulProgressMax 的含义的详细信息,请参阅 peAsynchPhase 的说明。
如果 pulProgressMax 是空指针,则不会返回预期最大值。
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 是空指针,则不返回状态代码。
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 都指示受命令影响的行总数。