通過 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
。 如果您在設定屬性值時需要其他處理,則會覆寫這個方法。 您可以針對每個屬性集擁有其中一個方法。