通过 OLE DB 一致性测试
为了使提供程序更加一致,数据访问 SDK 提供了一组 OLE DB 一致性测试。 测试检查提供商的所有方面,并提供合理的保证,使提供商按预期运行。 可以在 Microsoft 数据访问 SDK 上找到 OLE DB 一致性测试。 本部分重点介绍通过符合性测试时应执行的操作。 有关运行 OLE DB 一致性测试的信息,请参阅 SDK。
运行符合性测试
在 Visual C++ 6.0 中,OLE DB 提供程序模板添加了许多挂钩函数,用于检查值和属性。 其中大多数函数都是为了响应符合性测试而添加的。
注意
需要为提供程序添加多个验证函数才能通过 OLE DB 一致性测试。
此提供程序需要两个验证例程。 第一个例程 CRowsetImpl::ValidateCommandID
是行集类的一部分。 提供程序模板在创建行集期间调用它。 此示例使用此例程告诉使用者它不支持索引。 第一次是调用 CRowsetImpl::ValidateCommandID
(请注意,提供程序使用接口映射中添加的 _RowsetBaseClass
typedef,用于提供程序支持书签中的 CCustomRowset
,因此无需键入该长行模板参数)。 接下来,如果索引参数不为 NULL,则返回 DB_E_NOINDEX,这表示使用者想对我们使用索引。 有关命令 ID 的详细信息,请参阅 OLE DB 规范并查找 IOpenRowset::OpenRowset
。
以下代码是 ValidateCommandID
验证例程:
/////////////////////////////////////////////////////////////////////
// CustomRS.H
// Class: CCustomRowset
HRESULT ValidateCommandID(DBID* pTableID, DBID* pIndexID)
{
HRESULT hr = _RowsetBaseClass::ValidateCommandID(pTableID, pIndexID);
if (hr != S_OK)
return hr;
if (pIndexID != NULL)
return DB_E_NOINDEX; // Doesn't support indexes
return S_OK;
}
每当有人更改 DBPROPSET_ROWSET 组上的属性时,提供程序模板都调用 OnPropertyChanged
方法。 如果要处理其他组的属性,请将它们添加到相应的对象(即 DBPROPSET_SESSION 检查进入 CCustomSession
类)。
代码首先检查属性是否链接到另一个属性。 如果属性被链接,它将 DBPROP_BOOKMARKS 属性设置为 True
。 OLE DB 规范的附录 C 包含有关属性的信息。 此信息还告知属性是否已链接到另一个属性。
你可能还希望将 IsValidValue
例程添加到代码中。 尝试设置属性时,模板会调用 IsValidValue
。 如果在设置属性值时需要其他处理,则重写此方法。 对于每个属性集,可以有以下方法之一。