通过 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。 如果在设置属性值时需要其他处理,则重写此方法。 对于每个属性集,可以有以下方法之一。

另请参阅

高级提供程序技术