提供標準 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的用戶類別。
Storage
用戶記錄類別。
CreatorClass
包含數據列集屬性的類別;通常是 命令。
ArrayType
做為數據列集數據的記憶體的類別。 此參數預設為 CAtlArray,但它可以是任何支援必要功能的類別。
需求
Header: 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] true 如果索引 DBID為 ,則為 ; false 如果資料表 DBID為 ,則為 。
傳回值
標準 HRESULT。 根據 DBID 是數據表或索引(以 bIndex 表示),方法會傳回DB_E_NOINDEX或DB_E_NOTABLE。
備註
這個方法是由 CRowsetImpl ValidateCommandID 和 GetCommandFromID 的實作所呼叫。
CRowsetImpl::SetCommandText
驗證並儲存 DBID在兩個字串中 (m_strCommandText 和 m_strIndexText)。
語法
HRESULT CRowsetBaseImpl::SetCommandText(DBID* pTableID,
DBID* pIndexID);
參數
pTableID
[in]表示數據表標識碼的指標 DBID 。
pIndexID
[in]表示索引標識碼的指標 DBID 。
傳回值
標準 HRESULT。
備註
方法 SetCommentText 由 CreateRowset呼叫,這是的 IOpenRowsetImpl靜態範本化方法。
這個方法會透過向上轉換的指標呼叫 ValidateCommandID 和 GetCommandFromID 來委派其工作。
CRowsetImpl::GetColumnInfo
擷取特定用戶端要求的數據行資訊。
語法
static ATLCOLUMNINFO* CRowsetBaseImpl::GetColumnInfo(T* pv,
ULONG* pcCols);
參數
光伏
[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]表示數據表標識碼之的指標 DBID 。
pIndexID
[in]表示索引標識碼的指標 DBID 。
傳回值
標準 HRESULT。
備註
這個方法會透過 靜態向上廣播 CRowsetImpl 呼叫,以填入數據成員 m_strCommandText 和 m_strIndexText。 根據預設,此方法會檢查其中一個或兩個參數是否包含字串值。 如果它們包含字串值,這個方法會將字串值複製到數據成員。 藉由將具有這個簽章的方法放在衍生類別中 CRowsetImpl,系統會呼叫方法,而不是基底實作。
CRowsetImpl::ValidateCommandID
檢查是否或兩者都包含 DBID字串值,如果是的話,請將它們複製到其數據成員 m_strCommandText 和 m_strIndexText。
語法
HRESULT CRowsetBaseImpl::ValidateCommandID(DBID* pTableID,
DBID* pIndexID);
參數
pTableID
[in]表示數據表標識碼的指標 DBID 。
pIndexID
[in]表示索引標識碼的指標 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;