多くの実装インターフェイスの多重継承を必要としない、標準の 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 ですが、必要な機能をサポートする任意のクラスを指定できます。
要件
ヘッダー: atldb.h
メンバー
メソッド
| Name | 説明 |
|---|---|
| NameFromDBID | DBID から文字列を抽出し、渡された bstr にそれをコピーします。 |
| SetCommandText | 2 つの文字列 (m_strCommandText と m_strIndexText) 内の DBID を検証し、格納します。 |
オーバーライド可能なメソッド
| 名前 | 説明 |
|---|---|
| GetColumnInfo | 特定のクライアント要求の列情報を取得します。 |
| GetCommandFromID | いずれかまたは両方のパラメーターに文字列値が含まれているかどうかを確認します。含まれている場合は、データ メンバー m_strCommandText および m_strIndexText に文字列値をコピーします。 |
| ValidateCommandID | いずれかまたは両方の DBID に文字列値が含まれているかどうかを確認します。含まれている場合は、それらをデータ メンバー m_strCommandText および m_strIndexText にコピーします。 |
データ メンバー
| 名前 | 説明 |
|---|---|
| m_rgRowData | 既定では、ユーザー レコード テンプレート引数を CRowsetImpl へとテンプレート化する CAtlArray です。 ArrayType テンプレート引数を CRowsetImpl に変更することで、別の配列型クラスを使用することもできます。 |
| m_strCommandText | 行セットの初期コマンドが含まれます。 |
| m_strIndexText | 行セットの初期インデックスが含まれます。 |
解説
CRowsetImpl は、静的アップキャストの形式でオーバーライドを提供します。 メソッドは、特定の行セットでコマンド テキストがどのように検証されるかを制御します。 実装インターフェイスを多重継承にすることで、独自の CRowsetImpl スタイル クラスを作成できます。 実装を提供する必要があるメソッドは Execute のみです。 作成する行セットの種類によっては、Creator メソッドで 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
[入力] 文字列の抽出元となる DBID へのポインター。
bstr
[入力] DBID 文字列のコピーを配置するための CComBSTR 参照。
bIndex
[入力] インデックス DBID の場合は true。テーブル DBID の場合は false。
戻り値
標準の HRESULT。 DBID がテーブルかインデックスか (bIndex によって示されます) によって、メソッドは DB_E_NOINDEX または DB_E_NOTABLE を返します。
解説
このメソッドは、ValidateCommandID と GetCommandFromID の CRowsetImpl 実装によって呼び出されます。
CRowsetImpl::SetCommandText
2 つの文字列 (m_strCommandText と m_strIndexText) 内の DBID を検証し、格納します。
構文
HRESULT CRowsetBaseImpl::SetCommandText(DBID* pTableID,
DBID* pIndexID);
パラメーター
pTableID
[入力] テーブル ID を表す DBID へのポインター。
pIndexID
[入力] インデックス ID を表す DBID へのポインター。
戻り値
標準の HRESULT。
解説
SetCommentText メソッドは、IOpenRowsetImpl の静的テンプレート化メソッドである CreateRowset によって呼び出されます。
このメソッドは、アップキャスト ポインターを通じて ValidateCommandID と GetCommandFromID を呼び出すことで、その機能を委任します。
CRowsetImpl::GetColumnInfo
特定のクライアント要求の列情報を取得します。
構文
static ATLCOLUMNINFO* CRowsetBaseImpl::GetColumnInfo(T* pv,
ULONG* pcCols);
パラメーター
pv
[入力] ユーザーの CRowsetImpl 派生クラスへのポインター。
pcCols
[入力] 返される列の数へのポインター (出力)。
戻り値
静的 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
[入力] テーブル ID を表す DBID へのポインター。
pIndexID
[入力] インデックス ID を表す DBID へのポインター。
戻り値
標準の HRESULT。
解説
このメソッドは、データ メンバー m_strCommandText および m_strIndexText を設定するために、CRowsetImpl によって静的アップキャストを通じて呼び出されます。 既定では、このメソッドは、いずれかまたは両方のパラメーターに文字列値が含まれているかどうかを確認します。 文字列値が含まれている場合、このメソッドは文字列値をデータ メンバーにコピーします。 このシグネチャを持つメソッドを CRowsetImpl の派生クラス内に配置すると、基本実装の代わりに、そのメソッドが呼び出されます。
CRowsetImpl::ValidateCommandID
いずれかまたは両方の DBID に文字列値が含まれているかどうかを確認します。含まれている場合は、それらをデータ メンバー m_strCommandText および m_strIndexText にコピーします。
構文
HRESULT CRowsetBaseImpl::ValidateCommandID(DBID* pTableID,
DBID* pIndexID);
パラメーター
pTableID
[入力] テーブル ID を表す DBID へのポインター。
pIndexID
[入力] インデックス ID を表す DBID へのポインター。
戻り値
標準の HRESULT。
解説
このメソッドは、データ メンバー m_strCommandText および m_strIndexText を設定するために、CRowsetImpl によって静的アップキャストを通じて呼び出されます。 既定では、このメソッドは、いずれかまたは両方の DBID に文字列値が含まれているかどうかを確認します。含まれている場合には、それらをデータ メンバーにコピーします。 このシグネチャを持つメソッドを CRowsetImpl の派生クラス内に配置すると、基本実装の代わりに、そのメソッドが呼び出されます。
CRowsetImpl::m_rgRowData
既定では、ユーザー レコード テンプレート引数を CRowsetImpl へとテンプレート化する CAtlArray です。
構文
ArrayType CRowsetBaseImpl::m_rgRowData;
解説
ArrayType は、CRowsetImpl のテンプレート パラメーターです。
CRowsetImpl::m_strCommandText
行セットの初期コマンドが含まれます。
構文
CComBSTR CRowsetBaseImpl::m_strCommandText;
CRowsetImpl::m_strIndexText
行セットの初期インデックスが含まれます。
構文
CComBSTR CRowsetBaseImpl::m_strIndexText;