提供标准 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_strCommandText 和 m_strIndexText)中。 |
可替代的方法
| 名称 | 描述 |
|---|---|
| GetColumnInfo | 检索特定客户端请求的列信息。 |
| GetCommandFromID | 检查其中一个或两个参数是否都包含字符串值,如果是,则将字符串值复制到 m_strCommandText 和 m_strIndexText 数据成员。 |
| ValidateCommandID | 检查其中一个或两个 DBID 是否都包含字符串值,如果是,则将它们复制到 m_strCommandText 和 m_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。
备注
此方法由 ValidateCommandID 和 GetCommandFromID 的 CRowsetImpl 实现调用。
CRowsetImpl::SetCommandText
验证 DBID 并将其存储在两个字符串(m_strCommandText 和 m_strIndexText)中。
语法
HRESULT CRowsetBaseImpl::SetCommandText(DBID* pTableID,
DBID* pIndexID);
参数
pTableID
[in] 指向表示表 ID 的 DBID 的指针。
pIndexID
[in] 指向表示索引 ID 的 DBID 的指针。
返回值
标准 HRESULT。
备注
SetCommentText 方法由 CreateRowset(IOpenRowsetImpl 的静态模板化方法)调用。
此方法通过向上转换的指针调用 ValidateCommandID 和 GetCommandFromID 来委托其工作。
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_strCommandText 和 m_strIndexText 数据成员。
语法
HRESULT CRowsetBaseImpl::GetCommandFromID(DBID* pTableID,
DBID* pIndexID);
参数
pTableID
[in] 指向表示表 ID 的 DBID 的指针。
pIndexID
[in] 指向表示索引 ID 的 DBID 的指针。
返回值
标准 HRESULT。
备注
CRowsetImpl 通过静态向上转换调用此方法,以填充 m_strCommandText 和 m_strIndexText 数据成员。 默认情况下,此方法检查其中一个或两个参数是否包含字符串值。 如果它们包含字符串值,此方法会将字符串值复制到数据成员。 通过将具有此签名的方法放置在 CRowsetImpl 派生类中,将调用方法而不是基实现。
CRowsetImpl::ValidateCommandID
检查其中一个或两个 DBID 是否都包含字符串值,如果是,则将它们复制到 m_strCommandText 和 m_strIndexText 数据成员。
语法
HRESULT CRowsetBaseImpl::ValidateCommandID(DBID* pTableID,
DBID* pIndexID);
参数
pTableID
[in] 指向表示表 ID 的 DBID 的指针。
pIndexID
[in] 指向表示索引 ID 的 DBID 的指针。
返回值
标准 HRESULT。
备注
CRowsetImpl 通过静态向上转换调用此方法,以填充其 m_strCommandText 和 m_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;