存取子和資料列集
OLE DB 樣板會透過 CAccessorRowset 類別使用存取子和資料列集,來設定和擷取資料。這個類別可以處理不同型別的多重存取子。
存取子型別
衍生自 CAccessorBase 的所有存取子。CAccessorBase 同時提供參數和資料行繫結。
下圖顯示存取子型別。
存取子類別
CAccessor:當您在設計階段就知道資料庫來源的結構時,請使用這個存取子。CAccessor 會靜態繫結包含緩衝區的資料庫記錄至資料來源。
CDynamicAccessor:當您在設計階段不知道資料庫的結構時,請使用這個存取子。CDynamicAccessor 呼叫 IColumnsInfo::GetColumnInfo 以取得資料庫資料行資訊。它可以建立和管理存取子和緩衝區。
CDynamicParameterAccessor:請使用這個存取子來處理未知的命令類型。CDynamicParameterAccessor 會在您準備命令時取得 ICommandWithParameters 介面的參數資訊 (如果提供者可以支援 ICommandWithParameters)。
CDynamicStringAccessor、CDynamicStringAccessorA 和 CDynamicStringAccessorW:當您不知道資料庫的結構描述時,請使用這些類別。CDynamicStringAccessorA 會將資料擷取為 ANSI 字串,CDynamicStringAccessorW 則會將資料擷取為 Unicode 字串。
CManualAccessor:使用了這個類別,您就能在提供者可轉換型別的情況下,使用任何想要的資料型別。它可以同時處理結果資料行和命令參數。
下表摘要了 OLE DB 樣板的存取子型別支援。
存取子型別 |
Dynamic |
處理參數 |
緩衝區 |
多重存取子 |
---|---|---|---|---|
CAccessor |
否 |
是 |
使用者 |
是 |
CDynamicAccessor |
是 |
否 |
OLE DB 樣板 |
否 |
CDynamicParameterAccessor |
是 |
是 |
OLE DB 樣板 |
否 |
CDynamicStringAccessor[A,W] |
是 |
否 |
OLE DB 樣板 |
否 |
CManualAccessor |
是 |
是 |
使用者 |
是 |
資料列集型別
OLE DB 樣板支援三種資料列集 (請參考上圖):單一資料列集 (由 CRowset 實作)、大量資料列集 (由 CBulkRowset 實作) 和陣列資料列集 (由 CArrayRowset 實作)。單一資料列集可以在呼叫 MoveNext 時擷取一個資料列控制代碼。大量資料列集可以擷取多個資料列控制代碼。陣列資料列集是可以使用陣列語法存取的資料列集。
下圖顯示資料列集型別。
資料列集類別
結構描述資料列集不會存取資料存放區裡的資料,而是存取資料存放區的相關資訊,也就是中繼資料 (Metadata)。結構描述 (Schema) 資料列集通常會使用於以下狀況:在編譯時期還不知道資料庫結構,但必須在執行階段取得該結構。