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_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;