CCustomSession (CustomSess.H)
CustomSess.H には OLE DB セッション オブジェクトの宣言と実装が含まれています。 データ ソース オブジェクトは、セッション オブジェクトを作成し、コンシューマーとプロバイダー間のメッセージ交換を表します。 1 つのデータ ソースに対して複数の同時セッションを開くことができます。 CCustomSession の継承リストは次のとおりです。
/////////////////////////////////////////////////////////////////////////
// CCustomSession
class ATL_NO_VTABLE CCustomSession :
public CComObjectRootEx<CComSingleThreadModel>,
public IGetDataSourceImpl<CCustomSession>,
public IOpenRowsetImpl<CCustomSession>,
public ISessionPropertiesImpl<CCustomSession>,
public IObjectWithSiteSessionImpl<CCustomSession>,
public IDBSchemaRowsetImpl<CCustomSession>,
public IDBCreateCommandImpl<CCustomSession, CCustomCommand>
セッション オブジェクトは IGetDataSource、IOpenRowset、ISessionProperties、IDBCreateCommand を継承します。 IGetDataSource インターフェイスにより、セッションはそれを作成したデータソースを取得できます。 これは、作成したデータ ソースからプロパティを取得する必要がある場合や、データ ソースが提供できるその他の情報を取得する場合に便利です。 ISessionProperties インターフェイスは、セッションのすべてのプロパティを処理します。 IOpenRowset と IDBCreateCommand インターフェイスは、データベースの作業を行うために使われます。 プロバイダーがコマンドをサポートしている場合は、IDBCreateCommand インターフェイスを実装します。 コマンドを実行できるコマンド オブジェクトを作成するために使われます。 プロバイダーは常に IOpenRowset オブジェクトを実装します。 それを使うと、プロバイダーから行セットが生成されます。 プロバイダーからの既定の行セット (たとえば "select * from mytable") です。
ウィザードは 3 つのセッション クラスも生成します。CCustomSessionColSchema、CCustomSessionPTSchema、CCustomSessionTRSchema です。 これらのセッションは、スキーマ行セットに使われます。 プロバイダーは、スキーマ行セットを使って、コンシューマーがクエリを実行したりデータをフェッチしたりすることなく、メタデータをコンシューマーに返すことができます。 メタデータのフェッチは、プロバイダーの機能を検索するよりもはるかに高速になる場合があります。
OLE DB の仕様では、IDBSchemaRowset インターフェイスを実装するプロバイダーは、3 つのスキーマ行セット タイプ DBSCHEMA_COLUMNS、DBSCHEMA_PROVIDER_TYPES、DBSCHEMA_TABLES をサポートしている必要があります。 ウィザードでは、各スキーマ行セットの実装が生成されます。 ウィザードが生成する各クラスには、Execute メソッドが含まれています。 この Execute メソッドでは、テーブル、列、サポートしているデータ型に関するデータをプロバイダーに返すことができます。 このデータはコンパイル時にわかります。