CRowsetImpl 类

提供标准 OLE DB 行集实现,而无需多次继承多个实现接口。

语法

template <
   class T,
   class Storage,
   class CreatorClass,
   class ArrayType = CAtlArray<Storage>,
   class RowClass = CSimpleRow,
   class RowsetInterface = IRowsetImpl <T, IRowset>
>
class CRowsetImpl :
   public CComObjectRootEx<CreatorClass::_ThreadModel>,
   public CRowsetBaseImpl<T, Storage, ArrayType, RowsetInterface>,
   public IRowsetInfoImpl<T, CreatorClass::_PropClass>

参数

T
派生自 CRowsetImpl 的用户类。

存储
用户记录类。

CreatorClass
包含行集属性的类;通常为命令。

ArrayType
将充当行集数据的存储的类。 此参数默认为 CAtlArray,但它可以是支持所需功能的任何类。

要求

标头: atldb.h

成员

方法

名称 描述
NameFromDBID DBID 中提取字符串,并将其复制到传入的 bstr
SetCommandText 验证 DBID 并将其存储在两个字符串(m_strCommandTextm_strIndexText)中。

可替代的方法

名称 描述
GetColumnInfo 检索特定客户端请求的列信息。
GetCommandFromID 检查其中一个或两个参数是否都包含字符串值,如果是,则将字符串值复制到 m_strCommandTextm_strIndexText 数据成员。
ValidateCommandID 检查其中一个或两个 DBID 是否都包含字符串值,如果是,则将它们复制到 m_strCommandTextm_strIndexText 数据成员。

数据成员

名称 描述
m_rgRowData 默认情况下,CAtlArray 会将用户记录模板参数化为 CRowsetImpl。 通过将 ArrayType 模板参数更改为 CRowsetImpl,可以使用另一个数组类型类。
m_strCommandText 包含行集的初始命令。
m_strIndexText 包含行集的初始索引。

注解

CRowsetImpl 以静态向上转换的形式提供替代。 这些方法控制给定行集将验证命令文本的方式。 可以通过使实现接口具有多重继承性来创建自己的 CRowsetImpl 样式类。 必须为其提供实现的唯一方法是 Execute。 根据要创建的行集类型,创建者方法需要不同的 Execute 签名。 例如,如果使用 CRowsetImpl 派生类实现架构行集,则 Execute 方法将具有以下签名:

HRESULT Execute(LONG* pcRows, ULONG cRestrictions, const VARIANT* rgRestrictions)

如果要创建 CRowsetImpl 派生类来实现命令或会话的行集,则 Execute 方法将具有以下签名:

HRESULT Execute(LONG* pcRows, DBPARAMS* pParams)

若要实现任何 CRowsetImpl 派生的 Execute 方法,必须填充内部数据缓冲区 (m_rgRowData)。

CRowsetImpl::NameFromDBID

DBID 中提取字符串,并将其复制到传入的 bstr

语法

HRESULT CRowsetBaseImpl::NameFromDBID(DBID* pDBID,
   CComBSTR& bstr,
   bool bIndex);

参数

pDBID
[in] 指向要从中提取字符串的 DBID 的指针。

bstr
[in] 用于放置 DBID 字符串副本的 CComBSTR 引用。

bIndex
[in] 若是索引 DBID,则为 true;若是表 DBID,则为 false

返回值

标准 HRESULT。 根据 DBID 是表还是索引(用 bIndex 表示),该方法将返回 DB_E_NOINDEX 或 DB_E_NOTABLE

备注

此方法由 ValidateCommandIDGetCommandFromIDCRowsetImpl 实现调用。

CRowsetImpl::SetCommandText

验证 DBID 并将其存储在两个字符串(m_strCommandTextm_strIndexText)中。

语法

HRESULT CRowsetBaseImpl::SetCommandText(DBID* pTableID,
   DBID* pIndexID);

参数

pTableID
[in] 指向表示表 ID 的 DBID 的指针。

pIndexID
[in] 指向表示索引 ID 的 DBID 的指针。

返回值

标准 HRESULT。

备注

SetCommentText 方法由 CreateRowsetIOpenRowsetImpl 的静态模板化方法)调用。

此方法通过向上转换的指针调用 ValidateCommandIDGetCommandFromID 来委托其工作。

CRowsetImpl::GetColumnInfo

检索特定客户端请求的列信息。

语法

static ATLCOLUMNINFO* CRowsetBaseImpl::GetColumnInfo(T* pv,
   ULONG* pcCols);

参数

pv
[in] 指向用户的 CRowsetImpl 派生类的指针。

pcCols
[in] 指向返回的列数的指针(输出)。

返回值

指向静态 ATLCOLUMNINFO 结构的指针。

备注

此方法为高级替代。

此方法由多个基实现类调用,用于检索特定客户端请求的列信息。 通常,此方法将由 IColumnsInfoImpl 调用。 如果替代此方法,则必须在 CRowsetImpl 派生类中放置方法的一个版本。 由于该方法可能放置在非模板化类中,因此必须将 pv 更改为相应的 CRowsetImpl 派生类

下面的示例演示了 GetColumnInfo 用法。 在此示例中,CMyRowset 是一个 CRowsetImpl 派生类。 若要替代此类所有实例的 GetColumnInfo,请将以下方法放在 CMyRowset 类定义中:

static ATLCOLUMNINFO* GetColumnInfo(CCustomRowset* pRowset, DBORDINAL* pcCols)
{
   // Add your implementation here and/or call the base class

   return CRowsetImpl::GetColumnInfo(pRowset, pcCols);
}

CRowsetImpl::GetCommandFromID

检查其中一个或两个参数是否都包含字符串值,如果是,则将字符串值复制到 m_strCommandTextm_strIndexText 数据成员。

语法

HRESULT CRowsetBaseImpl::GetCommandFromID(DBID* pTableID,
   DBID* pIndexID);

参数

pTableID
[in] 指向表示表 ID 的 DBID 的指针。

pIndexID
[in] 指向表示索引 ID 的 DBID 的指针。

返回值

标准 HRESULT。

备注

CRowsetImpl 通过静态向上转换调用此方法,以填充 m_strCommandTextm_strIndexText 数据成员。 默认情况下,此方法检查其中一个或两个参数是否包含字符串值。 如果它们包含字符串值,此方法会将字符串值复制到数据成员。 通过将具有此签名的方法放置在 CRowsetImpl 派生类中,将调用方法而不是基实现。

CRowsetImpl::ValidateCommandID

检查其中一个或两个 DBID 是否都包含字符串值,如果是,则将它们复制到 m_strCommandTextm_strIndexText 数据成员。

语法

HRESULT CRowsetBaseImpl::ValidateCommandID(DBID* pTableID,
   DBID* pIndexID);

参数

pTableID
[in] 指向表示表 ID 的 DBID 的指针。

pIndexID
[in] 指向表示索引 ID 的 DBID 的指针。

返回值

标准 HRESULT。

备注

CRowsetImpl 通过静态向上转换调用此方法,以填充其 m_strCommandTextm_strIndexText 数据成员。 默认情况下,此方法检查其中一个或两个 DBID 是否包含字符串值,如果是,则将它们复制到其数据成员。 通过将具有此签名的方法放置在 CRowsetImpl 派生类中,将调用方法而不是基实现。

CRowsetImpl::m_rgRowData

默认情况下,CAtlArray 会将用户记录模板参数化为 CRowsetImpl

语法

ArrayType CRowsetBaseImpl::m_rgRowData;

备注

ArrayType 是 CRowsetImpl 的模板参数

CRowsetImpl::m_strCommandText

包含行集的初始命令。

语法

CComBSTR CRowsetBaseImpl::m_strCommandText;

CRowsetImpl::m_strIndexText

包含行集的初始索引。

语法

CComBSTR CRowsetBaseImpl::m_strIndexText;