共用方式為


CDynamicAccessor 類別

讓您能在不知道資料庫結構描述 (資料庫的基礎結構) 的情況下,存取資料來源。

語法

class CDynamicAccessor : public CAccessorBase

需求

標頭檔:atldbcli.h

成員

方法

名稱 描述
AddBindEntry 在覆寫預設存取子時,將系結專案加入至輸出數據行。
CDynamicAccessor 具現化並初始化 CDynamicAccessor 物件。
關閉 解除系結所有數據行、釋放配置的記憶體,並在類別中釋放 IAccessor 介面指標。
GetBlobHandling 擷取目前數據列的 BLOB 處理值。
GetBlobSizeLimit 擷取以位元組為單位的 BLOB 大小上限。
GetBookmark 擷取目前數據列的書籤。
GetColumnCount 擷取數據列集中的數據行數目。
GetColumnFlags 擷取數據行特性。
GetColumnInfo 擷取數據行元數據。
GetColumnName 擷取指定數據行的名稱。
GetColumnType 擷取指定數據行的數據類型。
GetLength 擷取數據行的最大可能長度,以位元組為單位。
GetOrdinal 擷取指定數據行名稱的數據行索引。
GetStatus 擷取指定數據行的狀態。
GetValue 從緩衝區擷取數據。
SetBlobHandling 設定目前數據列的 BLOB 處理值。
SetBlobSizeLimit 以位元組為單位設定 BLOB 大小上限。
SetLength 以位元組為單位設定數據行的長度。
SetStatus 設定指定數據行的狀態。
SetValue 將數據儲存至緩衝區。

備註

使用 CDynamicAccessor 方法來取得數據行資訊,例如數據行名稱、數據行計數、數據類型等等。 然後,您可以使用這個數據行資訊,在運行時間動態建立存取子。

數據行資訊會儲存在由這個類別建立和管理的緩衝區中。 使用 GetValue 從緩衝區取得數據。

如需使用動態存取子類別的討論和範例,請參閱 使用動態存取子

CDynamicAccessor::AddBindEntry

將系結專案加入至輸出數據行。

語法

HRESULT AddBindEntry(const DBCOLUMNINFO& info) throw();

參數

資訊
[in] DBCOLUMNINFO 結構,包含數據行資訊。 請參閱 OLE DB 程式設計人員參考中的 IColumnsInfo::GetColumnInfo 中的“DBCOLUMNINFO 結構”。

傳回值

其中一個標準 HRESULT 值。

備註

覆寫使用 CDynamicAccessor 建立的預設存取子時,請使用此方法(請參閱 如何擷取數據?)。

CDynamicAccessor::CDynamicAccessor

具現化並初始化 CDynamicAccessor 物件。

語法

CDynamicAccessor(DBBLOBHANDLINGENUM eBlobHandling = DBBLOBHANDLING_DEFAULT,
   DBLENGTH nBlobSize = 8000);

參數

eBlobHandling
指定如何處理二進位大型物件 (BLOB) 數據。 預設值為 DBBLOBHANDLING_DEFAULT。 如需 DBBLOBHANDLINGENUM 值的描述,請參閱 SetBlobHandling

nBlobSize
最大 BLOB 的大小 (以位元組為單位);此值的資料行資料被視為 BLOB。 默認值為 8,000。 如需詳細資訊,請參閱 SetBlobSizeLimit

備註

如果您使用 建構函式來初始化 CDynamicAccessor 物件,您可以指定其系結 BLOB 的方式。 BLOB 可以包含二進位數據,例如圖形、音效或已編譯的程序代碼。 默認行為是將超過8,000個字節的數據行視為BLOB,並嘗試將它們系結至 ISequentialStream 物件。 不過,您可以將不同的值指定為 BLOB 大小。

您也可以指定如何處理 CDynamicAccessor 限定為 BLOB 數據的數據行數據:它可以以預設方式處理 BLOB 數據;它可以略過(不系結)BLOB 數據;也可以系結提供者配置的記憶體中的 BLOB 數據。

CDynamicAccessor::Close

解除系結所有數據行、釋放配置的記憶體,並在類別中釋放 IAccessor 介面指標。

語法

void Close() throw();

CDynamicAccessor::GetBlobHandling

擷取目前數據列的 BLOB 處理值。

語法

const DBBLOBHANDLINGENUM GetBlobHandling() const;

備註

傳回 SetBlobHandling 所設定的 BLOB 處理值 eBlobHandling

CDynamicAccessor::GetBlobSizeLimit

擷取以位元組為單位的 BLOB 大小上限。

語法

const DBLENGTH GetBlobSizeLimit() const;

備註

傳回由 SetBlobSizeLimit 所設定的 BLOB 處理值 nBlobSize

CDynamicAccessor::GetBookmark

擷取目前數據列的書籤。

語法

HRESULT GetBookmark(CBookmark< >* pBookmark) const throw();

參數

pBookmark
[out]CBookmark 物件的指標

傳回值

其中一個標準 HRESULT 值。

備註

您必須將 設定 DBPROP_IRowsetLocate 為 VARIANT_TRUE 以擷取書籤。

CDynamicAccessor::GetColumnCount

擷取數據行數目。

語法

DBORDINAL GetColumnCount() const throw();

傳回值

擷取的數據行數目。

CDynamicAccessor::GetColumnFlags

擷取數據行特性。

語法

bool GetColumnFlags(DBORDINAL nColumn,
   DBCOLUMNFLAGS* pFlags) const throw();

參數

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

pFlags
[out]描述數據行特性之位掩碼的指標。 請參閱 OLE DB 程式設計人員參考中的 IColumnsInfo::GetColumnInfo 中的「DBCOLUMNFLAGS 列舉類型」。

傳回值

如果成功擷取資料行特性,則傳 true 回 。 否則會傳回 false

備註

數據行編號是從一個位移。 數據行零是特殊案例;如果可用,則為書籤。

CDynamicAccessor::GetColumnInfo

傳回大部分取用者所需的數據行元數據。

語法

HRESULT GetColumnInfo(IRowset* pRowset,
   DBORDINAL* pColumns,
   DBCOLUMNINFO** ppColumnInfo,
   OLECHAR** ppStringsBuffer) throw();

參數

pRowset
[in]IRowset 介面的指標。

pColumns
[out]要在其中傳回數據列集中數據行數目的記憶體指標;這個數位包含書籤數據行,如果有的話。

ppColumnInfo
[out]要在其中傳回結構陣列的 DBCOLUMNINFO 記憶體指標。 請參閱 OLE DB 程式設計人員參考中的 IColumnsInfo::GetColumnInfo 中的“DBCOLUMNINFO 結構”。

ppStringsBuffer
[out]記憶體指標,用來傳回單一配置區塊內所有字串值之記憶體指標(在 columnidpwszName 中使用的名稱)。

傳回值

其中一個標準 HRESULT 值。

備註

如需數據類型 、 和 的詳細資訊,請參閱 OLE DB 程式設計人員參考中的 IColumnsInfo::GetColumnInfoOLECHARDBCOLUMNINFODBORDINAL

CDynamicAccessor::GetColumnName

擷取指定數據行的名稱。

語法

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

參數

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

傳回值

指定資料行的名稱。

CDynamicAccessor::GetColumnType

擷取指定數據行的數據類型。

語法

bool GetColumnType(DBORDINAL nColumn,
   DBTYPE* pType) const throw();

參數

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

pType
[out]指定之數據行之數據類型的指標。

傳回值

true在成功或false失敗時傳回 。

CDynamicAccessor::GetLength

擷取指定數據行的長度。

語法

bool GetLength(DBORDINAL nColumn,
   DBLENGTH* pLength) const throw();

bool GetLength(const CHAR* pColumnName,
   DBLENGTH* pLength) const throw();

bool GetLength(const WCHAR* pColumnName,
   DBLENGTH* pLength) const throw();

參數

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

pColumnName
[in] 指向包含資料行名稱之字元字串的指標。

pLength
[out]整數的指標,包含以位元組為單位的數據行長度。

傳回值

如果找到指定的資料列, 則傳 true 回 。 否則,此函式會傳 false回 。

備註

第一個覆寫會採用數據行編號,而第二個和第三個覆寫則分別採用 ANSI 或 Unicode 格式的數據行名稱。

CDynamicAccessor::GetOrdinal

擷取指定資料行名稱的資料行數目。

語法

bool GetOrdinal(const CHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

bool GetOrdinal(const WCHAR* pColumnName,
   DBORDINAL* pOrdinal) const throw();

參數

pColumnName
[in] 指向包含資料行名稱之字元字串的指標。

pOrdinal
[out] 指向資料行數目的指標。

傳回值

如果找到具有指定名稱的資料列, 則傳 true 回 。 否則,此函式會傳 false回 。

CDynamicAccessor::GetStatus

擷取指定數據行的狀態。

語法

bool GetStatus(DBORDINAL nColumn,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const CHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

bool GetStatus(const WCHAR* pColumnName,
   DBSTATUS* pStatus) const throw();

參數

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

pColumnName
[in] 指向包含資料行名稱之字元字串的指標。

pStatus
[out]包含數據行狀態之變數的指標。 如需詳細資訊,請參閱 OLE DB 程式設計人員參考中的 DBSTATUS

傳回值

如果找到指定的資料列, 則傳 true 回 。 否則,此函式會傳 false回 。

CDynamicAccessor::GetValue

擷取指定數據行的數據。

語法

void* GetValue(DBORDINAL nColumn) const throw();

void* GetValue(const CHAR* pColumnName) const throw();

void* GetValue(const WCHAR* pColumnName) const throw();

template < class ctype >
bool GetValue(DBORDINAL nColumn, ctype* pData) const throw();

template < class ctype >
bool GetValue(const CHAR* pColumnName, ctype* pData) const throw();

template < class ctype >
bool GetValue(const WCHAR* pColumnName, ctype* pData) const throw();

參數

ctype
[in]樣板化參數,可處理字串類型 (CHAR*, ) 以外的任何數據類型, WCHAR*這需要特殊處理。 GetValue 會根據您在這裡指定的專案,使用適當的數據類型。

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

pColumnName
[in]數據行名稱。

pData
[out]指定之數據行內容的指標。

傳回值

如果您想要傳遞字串數據,請使用 的非範本版本 GetValue。 這個方法的非範本版本會傳回 void*,指向包含指定之數據行數據的緩衝區部分。 如果找不到數據行,則傳回NULL。

對於所有其他數據類型,使用 樣板化版本的 GetValue比較簡單。 範本化版本會在成功或false失敗時傳回true

備註

使用非範本版本可傳回包含字串的數據行,以及包含其他數據類型之數據行的樣板化版本。

在偵錯模式中,如果 pData 的大小與它指向的數據行大小不相等,您將會收到判斷提示。

CDynamicAccessor::SetBlobHandling

設定目前數據列的 BLOB 處理值。

語法

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

參數

eBlobHandling
指定 BLOB 資料的處理方式。 它可能需要下列值:

  • DBBLOBHANDLING_DEFAULT:將大於 nBlobSize 的數據行數據處理為 SetBlobSizeLimitBLOB 數據,並透過 ISequentialStreamIStream 物件擷取數據。 此選項會嘗試系結包含大於 nBlobSize 或列為 blob 數據DBTYPE_IUNKNOWN的數據行。

  • DBBLOBHANDLING_NOSTREAMS:將大於 nBlobSize 的數據行數據處理為 SetBlobSizeLimitBLOB 數據,並透過提供者配置的取用者擁有記憶體中的參考來擷取數據。 此選項適用於具有多個 BLOB 資料行的數據表,而且提供者每個存取子只支援一個 ISequentialStream 物件。

  • DBBLOBHANDLING_SKIP:略過(請勿系結)限定為包含 BLOB 的數據行(存取子不會系結或擷取數據行值,但仍會擷取數據行狀態和長度)。

備註

您應該先呼叫 SetBlobHandling,然後再呼叫 Open

建構函式方法 CDynamicAccessor 會將 BLOB 處理值設定為DBBLOBHANDLING_DEFAULT。

CDynamicAccessor::SetBlobSizeLimit

以位元組為單位設定 BLOB 大小上限。

語法

void SetBlobSizeLimit(DBLENGTH nBlobSize);

參數

nBlobSize
指定 BLOB 大小限制。

備註

設定以位元組為單位的 BLOB 大小上限;大於此值的數據行數據會被視為 BLOB。 某些提供者會為數據行提供非常大的大小(例如 2 GB)。 您通常會嘗試將這些數據行系結為 BLOB,而不是嘗試為這個大小的數據行配置記憶體。 如此一來,您就不需要配置所有記憶體,但您仍然可以讀取所有數據,而不必擔心截斷。 不過,在某些情況下,您可能會想要強制 CDynamicAccessor 系結原生數據類型中的大型數據行。 若要這樣做,請在呼叫 之前呼叫 SetBlobSizeLimit Open

建構函式方法 CDynamicAccessor 會將 BLOB 大小上限設定為預設值 8,000 個字節。

CDynamicAccessor::SetLength

設定指定之數據行的長度。

語法

bool SetLength(DBORDINAL nColumn,
   DBLENGTH nLength)throw();

bool SetLength(const CHAR* pColumnName,
   DBLENGTH nLength) throw();

bool SetLength(const WCHAR* pColumnName,
   DBLENGTH nLength) throw();

參數

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

nLength
[in]以位元組為單位的數據行長度。

pColumnName
[in] 指向包含資料行名稱之字元字串的指標。

傳回值

如果成功設定指定的資料行長度,則傳 true 回 。 否則,此函式會傳 false回 。

CDynamicAccessor::SetStatus

設定指定數據行的狀態。

語法

bool SetStatus(DBORDINAL nColumn,
   DBSTATUS status)throw();

bool SetStatus(const CHAR* pColumnName,
   DBSTATUS status) throw();

bool SetStatus(const WCHAR* pColumnName,
   DBSTATUS status) throw();

參數

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

status
[in]數據行狀態。 如需詳細資訊,請參閱 OLE DB 程式設計人員參考中的 DBSTATUS

pColumnName
[in] 指向包含資料行名稱之字元字串的指標。

傳回值

如果成功設定指定的資料行狀態,則傳 true 回 。 否則,此函式會傳 false回 。

CDynamicAccessor::SetValue

將資料儲存至指定的數據行。

語法

template <class ctype>
bool SetValue(
   DBORDINAL nColumn,
   constctype& data) throw( );

template <class ctype>
bool SetValue(
   const CHAR * pColumnName,
   const ctype& data) throw( );

template <class ctype>
bool SetValue(
   const WCHAR *pColumnName,
   const ctype& data) throw( );

參數

ctype
[in]樣板化參數,可處理字串類型 (CHAR*, ) 以外的任何數據類型, WCHAR*這需要特殊處理。 GetValue 會根據您在這裡指定的專案,使用適當的數據類型。

pColumnName
[in] 指向包含資料行名稱之字元字串的指標。

data
[in]包含數據的記憶體指標。

nColumn
[in] 資料行編號。 欄號從 1 開始。 如果有任何值,則值為0會參考書籤數據行。

傳回值

如果您想要設定字串數據,請使用 的非範本化版本 GetValue。 這個方法的非範本版本會傳回 void*,指向包含指定之數據行數據的緩衝區部分。 如果找不到數據行,則傳回NULL。

對於所有其他數據類型,使用 樣板化版本的 GetValue比較簡單。 範本化版本會在成功或false失敗時傳回true

另請參閱

OLE DB 消費者範本
OLE DB 消費者範本參考
CAccessor 類別
CDynamicParameterAccessor 類別
CManualAccessor 類別