共用方式為


CUtlProps 類別

實作各種 OLE DB 屬性介面的屬性(例如、 IDBPropertiesIDBPropertiesIRowsetInfo

語法

template < class T >
class ATL_NO_VTABLE CUtlProps : public CUtlPropsBase

參數

T
包含的 BEGIN_PROPSET_MAP類別。

需求

Header: atldb.h

成員

方法

名稱 描述
GetPropValue 從屬性集取得屬性。
IsValidValue 用來在設定屬性之前驗證值。
OnInterfaceRequested 當取用者在物件建立介面上呼叫方法時,處理選擇性介面的要求。
OnPropertyChanged 設定屬性以處理鏈結屬性之後呼叫。
SetPropValue 設定屬性集中的屬性。

備註

此類別大部分都是實作詳細數據。

CUtlProps 包含兩個成員,用於在內部設定屬性: GetPropValueSetPropValue

如需屬性集對應中使用的巨集詳細資訊,請參閱 BEGIN_PROPSET_MAPEND_PROPSET_MAP

CUtlProps::GetPropValue

從屬性集取得屬性。

語法

OUT_OF_LINE HRESULT GetPropValue(const GUID* pguidPropSet,
   DBPROPID dwPropId,
   VARIANT* pvValue);

參數

pguidPropSet
[in]PropSet 的 GUID。

dwPropId
[in]屬性索引。

pvValue
[out]包含新屬性值之 Variant 的指標。

傳回值

Failure 失敗時,如果成功,S_OK。

CUtlProps::IsValidValue

用來在設定屬性之前驗證值。

語法

virtual HRESULT CUtlPropsBase::IsValidValue(ULONG /* iCurSet */,
   DBPROP* pDBProp);

參數

iCurSet
屬性集陣列中的索引;如果只有一個屬性集,則為零。

pDBProp
DBPROP 結構中的屬性標識碼和新值。

傳回值

標準 HRESULT。 默認傳回值為 S_OK。

備註

如果您有想要在即將用來設定屬性的值上執行的任何驗證例程,您應該覆寫此函式。 例如,您可以針對密碼數據表驗證DBPROP_AUTH_PASSWORD,以判斷有效的值。

CUtlProps::OnInterfaceRequested

當取用者在其中一個物件建立介面上呼叫方法時,處理選擇性介面的要求。

語法

virtual HRESULT CUtlPropsBase::OnInterfaceRequested(REFIID riid);

參數

riid
[in]所要求介面的 IID。 如需詳細資訊,請參閱 OLE DB 程式設計人員參考中 riid 參數ICommand::Execute的描述(在 MDAC SDK)。

備註

OnInterfaceRequested當取用者在其中一個物件建立介面上呼叫方法時,處理選擇性介面的取用者要求(例如 IDBCreateSessionIDBCreateCommandIOpenRowsetICommand)。 它會設定所要求介面的對應 OLE DB 屬性。 例如,如果取用者要求 IID_IRowsetLocateOnInterfaceRequestedDBPROP_IRowsetLocate 設定 介面。 這樣做會在數據列集建立期間維持正確的狀態。

當取用者呼叫 或 ICommand::Execute時,會呼叫IOpenRowset::OpenRowset這個方法。

如果取用者開啟物件並要求選擇性介面,提供者應該將與該介面相關聯的屬性設定為VARIANT_TRUE。 若要允許屬性特定的處理, OnInterfaceRequested 請在呼叫提供者的 Execute 方法之前呼叫 。 根據預設,會 OnInterfaceRequested 處理下列介面:

  • IRowsetLocate

  • IRowsetChange

  • IRowsetUpdate

  • IConnectionPointContainer

  • IRowsetScroll

如果您想要處理其他介面,請在數據源、工作階段、命令或數據列集類別中覆寫此函式,以處理函式。 覆寫應該經過一般集合/取得屬性介面,以確保設定屬性也會設定任何鏈結的屬性(請參閱 OnPropertyChanged)。

CUtlProps::OnPropertyChanged

設定屬性以處理鏈結屬性之後呼叫。

語法

virtual HRESULT OnPropertyChanged(ULONG /* iCurSet */,
   DBPROP* pDBProp);

參數

iCurSet
屬性集陣列中的索引;如果只有一個屬性集,則為零。

pDBProp
DBPROP 結構中的屬性標識碼和新值。

傳回值

標準 HRESULT。 默認傳回值為 S_OK。

備註

如果您想要處理鏈結屬性,例如書籤或更新其值相依於另一個屬性值的更新,您應該覆寫此函式。

範例

在此函式中,用戶會從 DBPROP* 參數取得屬性標識碼。 現在,可以將標識碼與屬性比較為鏈結。 找到 屬性時, SetProperties 會使用現在設定與其他屬性一起設定的 屬性來呼叫 。 在此情況下,如果一個取得 DBPROP_IRowsetLocateDBPROP_LITERALBOOKMARKSDBPROP_ORDEREDBOOKMARKS 屬性,則可以設定 DBPROP_BOOKMARKS 屬性。

HRESULT OnPropertyChanged(ULONG /*iCurSet*/, DBPROP* pDBProp)
{
   ATLASSERT(pDBProp != NULL);

   DWORD dwPropertyID = pDBProp->dwPropertyID;

   if (dwPropertyID == DBPROP_IRowsetLocate || 
      dwPropertyID == DBPROP_LITERALBOOKMARKS ||
      dwPropertyID == DBPROP_ORDEREDBOOKMARKS)
   {
      CComVariant var = pDBProp->vValue;

      if (var.boolVal == VARIANT_TRUE)
      {
         // Set the bookmarks property as these are chained
         CComVariant bookVar(true);
         CDBPropSet set(DBPROPSET_ROWSET);
         set.AddProperty(DBPROP_BOOKMARKS, bookVar);

         return SetProperties(1, &set);
      }
   }

   return S_OK;
}

CUtlProps::SetPropValue

設定屬性集中的屬性。

語法

HRESULT SetPropValue(const GUID* pguidPropSet,
   DBPROPID dwPropId,
   VARIANT* pvValue);

參數

pguidPropSet
[in]PropSet 的 GUID。

dwPropId
[in]屬性索引。

pvValue
[in]包含新屬性值之 Variant 的指標。

傳回值

Failure 失敗時,如果成功,S_OK。

另請參閱

OLE DB 提供者範本
OLE DB 提供者範本架構