CUtlProps 类

实现各种 OLE DB 属性接口的属性(例如 IDBPropertiesIDBPropertiesIRowsetInfo)。

语法

template < class T >
class ATL_NO_VTABLE CUtlProps : public CUtlPropsBase

参数

T
包含 BEGIN_PROPSET_MAP 的类。

要求

标头: 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] 指向包含新属性值的变体的指针。

返回值

失败时为 Failure,如果成功,则为 S_OK。

CUtlProps::IsValidValue

用于在设置属性之前验证值。

语法

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

参数

iCurSet
属性集数组中的索引;如果只有一个属性集,则为零。

pDBProp
DBPROP 结构中的属性 ID 和新值。

返回值

标准 HRESULT。 默认返回值为 S_OK。

注解

如果想要在要用于设置属性的值上运行任何验证例程,则应重写此函数。 例如,可以针对密码表验证 DBPROP_AUTH_PASSWORD 以确定有效值。

CUtlProps::OnInterfaceRequested

当使用者在其中一个对象创建接口上调用方法时,处理对可选接口的请求。

语法

virtual HRESULT CUtlPropsBase::OnInterfaceRequested(REFIID riid);

参数

riid
[in] 请求的接口的 IID。 有关详细信息,请参阅 OLE DB 程序员参考ICommand::Executeriid 参数的说明(MDAC SDK 中)。

注解

当使用者在其中一个对象创建接口上(例如,IDBCreateSessionIDBCreateCommandIOpenRowsetICommand)调用方法时,OnInterfaceRequested 处理使用者对可选接口的请求。 它为请求的接口设置相应的 OLE DB 属性。 例如,如果使用者请求 IID_IRowsetLocate,则 OnInterfaceRequested 设置 DBPROP_IRowsetLocate 接口。 这样做会在创建行集期间保持正确的状态。

在使用者调用 IOpenRowset::OpenRowsetICommand::Execute 时调用此方法。

如果使用者打开对象并请求可选接口,则提供程序应将与该接口关联的属性设置为VARIANT_TRUE。 若要允许特定于属性的处理,OnInterfaceRequested 在调用提供程序的 Execute 方法之前调用。 默认情况下,OnInterfaceRequested 处理以下接口:

  • IRowsetLocate

  • IRowsetChange

  • IRowsetUpdate

  • IConnectionPointContainer

  • IRowsetScroll

如果要处理其他接口,请在数据源、会话、命令或行集类中重写此函数以处理函数。 重写应通过常规集/获取属性接口,以确保设置属性还会设置其他链接属性(查看 OnPropertyChanged)。

CUtlProps::OnPropertyChanged

在设置属性以处理链接属性后调用。

语法

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

参数

iCurSet
属性集数组中的索引;如果只有一个属性集,则为零。

pDBProp
DBPROP 结构中的属性 ID 和新值。

返回值

标准 HRESULT。 默认返回值为 S_OK。

注解

如果要处理链接的属性(例如书签或更新,其值依赖于其他属性值),则应重写此函数。

示例

在此函数中,用户从 DBPROP* 参数中获取属性 ID。 现在,可以将 ID 与属性进行比较,以便链接。 找到该属性时,将使用现在将与其他属性一起设置的属性来调用 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] 指向包含新属性值的变体的指针。

返回值

失败时为 Failure,如果成功,则为 S_OK。

另请参阅

OLE DB 提供程序模板
OLE DB 提供程序模板体系结构