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
メソッドでは、テーブル、列、サポートしているデータ型に関するデータをプロバイダーに返すことができます。 このデータはコンパイル時にわかります。