使用者資料錄

使用者資料錄可提供程式碼,以及可表示資料列集的資料行資料之資料結構。 使用者資料錄可在編譯時間或執行階段建立。 當使用 ATL OLE DB 提供者精靈建立提供者時,精靈會建立如下所示的預設使用者資料錄 (假設您已指定 "MyProvider" 的提供者名稱 [簡短名稱]):

class CWindowsFile:
   public WIN32_FIND_DATA
{
public:

BEGIN_PROVIDER_COLUMN_MAP(CMyProviderWindowsFile)
   PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
   PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
   PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
   PROVIDER_COLUMN_ENTRY_STR("FileName", 4, cFileName)
   PROVIDER_COLUMN_ENTRY_STR("AltFileName", 5, cAlternateFileName)
END_PROVIDER_COLUMN_MAP()

};

OLE DB 提供者樣板會處理所有與用戶端互動相關的 OLE DB 細節。 為了取得回應所需的資料行資料,提供者會呼叫必須先放在使用者資料錄的 GetColumnInfo 函式。 您可明確地覆寫使用者資料錄內的 GetColumnInfo,例如以下列方式將它宣告在 .h 檔:

template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols) 

這種做法相當於:

static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)

您也必須在使用者資料錄的 .cpp 檔內實作 GetColumnInfo

PROVIDER_COLUMN_MAP 巨集可協助您建立 GetColumnInfo 函式:

  • BEGIN_PROVIDER_COLUMN_MAP 定義函式原型 (Prototype) 和 ATLCOLUMNINFO 結構的靜態陣列。

  • PROVIDER_COLUMN_ENTRY 定義並初始化單一 ATLCOLUMNINFO

  • END_PROVIDER_COLUMN_MAP 關閉陣列和函式。 它也會在 pcCols 參數內放置陣列元素計數。

當使用者資料錄於 Run Time 建立時,GetColumnInfo 會使用 pThis 參數來接收資料列集或命令執行個體的指標。 命令和資料列集必須支援 IColumnsInfo 介面,這樣才能從這個指標取得資料行資訊。

CommandClassRowsetClass 為使用這個使用者資料錄的命令和資料列集。

如需覆寫使用者資料錄 GetColumnInfo 的詳細範例,請參閱動態決定傳回給消費者的資料行

請參閱

概念

OLE DB 提供者樣板架構