共用方式為


通過 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在 [提供者支援書籤] 中針對 的 介面對應CCustomRowset中新增的 typedef,因此您不需要輸入該長行的範本自變數。 接下來,如果索引參數不是 NULL,則傳回DB_E_NOINDEX (這表示取用者想要在我們上使用索引)。 如需指令識別碼的詳細資訊,請參閱 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 。 如果您在設定屬性值時需要其他處理,則會覆寫這個方法。 您可以針對每個屬性集擁有其中一個方法。

另請參閱

進階的提供者技術