Classe CDynamicAccessor

Consente di accedere a un'origine dati quando non si conosce lo schema del database (la struttura sottostante del database).

Sintassi

class CDynamicAccessor : public CAccessorBase

Requisiti

Intestazione: atldbcli.h

Membri

Metodi

Nome Descrizione
AddBindEntry Aggiunge una voce di associazione alle colonne di output quando si esegue l'override della funzione di accesso predefinita.
CDynamicAccessor Crea un'istanza e inizializza l'oggetto CDynamicAccessor .
Chiudi Annulla l'associazione di tutte le colonne, rilascia la memoria allocata e rilascia il puntatore dell'interfaccia IAccessor nella classe .
GetBlobHandling Recupera il valore di gestione BLOB per la riga corrente.
GetBlobSizeLimit Recupera le dimensioni massime del BLOB in byte.
GetBookmark Recupera il segnalibro per la riga corrente.
GetColumnCount Recupera il numero di colonne nel set di righe.
GetColumnFlags Recupera le caratteristiche della colonna.
GetColumnInfo Recupera i metadati della colonna.
GetColumnName Recupera il nome di una colonna specificata.
GetColumnType Recupera il tipo di dati di una colonna specificata.
GetLength Recupera la lunghezza massima possibile di una colonna in byte.
GetOrdinal Recupera l'indice di colonna in base al nome di una colonna.
GetStatus Recupera lo stato di una colonna specificata.
GetValue Recupera i dati dal buffer.
SetBlobHandling Imposta il valore di gestione BLOB per la riga corrente.
SetBlobSizeLimit Imposta le dimensioni massime del BLOB in byte.
SetLength Imposta la lunghezza della colonna in byte.
SetStatus Imposta lo stato di una colonna specificata.
SetValue Archivia i dati nel buffer.

Osservazioni:

Utilizzare CDynamicAccessor metodi per ottenere informazioni sulla colonna, ad esempio nomi di colonna, conteggio colonne, tipo di dati e così via. Usare quindi queste informazioni sulla colonna per creare una funzione di accesso in modo dinamico in fase di esecuzione.

Le informazioni sulla colonna vengono archiviate in un buffer creato e gestito da questa classe. Ottenere dati dal buffer usando GetValue.

Per una discussione ed esempi sull'uso delle classi di funzioni di accesso dinamiche, vedere Uso delle funzioni di accesso dinamiche.

CDynamicAccessor::AddBindEntry

Aggiunge una voce di associazione alle colonne di output.

Sintassi

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

Parametri

info
[in] Struttura DBCOLUMNINFO contenente informazioni sulla colonna. Vedere "Strutture DBCOLUMNINFO" in IColumnsInfo::GetColumnInfo nella guida di riferimento per programmatori OLE DB.

Valore restituito

Uno dei valori HRESULT standard.

Osservazioni:

Usare questo metodo quando si esegue l'override della funzione di accesso predefinita creata con CDynamicAccessor (vedere How Do I Fetch Data?).

CDynamicAccessor::CDynamicAccessor

Crea un'istanza e inizializza l'oggetto CDynamicAccessor .

Sintassi

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

Parametri

eBlobHandling
Specifica la modalità di gestione dei dati BLOB (Binary Large Object). Il valore predefinito è DBBLOBHANDLING_DEFAULT. Per una descrizione dei valori DBBLOBHANDHANDUM, vedere SetBlobHandling .

nBlobSize
Dimensioni massime DEL BLOB in byte; i dati delle colonne su questo valore vengono considerati come BLOB. Il valore predefinito è 8.000. Per informazioni dettagliate, vedere SetBlobSizeLimit .

Osservazioni:

Se si usa il costruttore per inizializzare l'oggetto CDynamicAccessor , è possibile specificare come verrà associato BLOB. I BLOB possono contenere dati binari, ad esempio grafica, audio o codice compilato. Il comportamento predefinito consiste nel considerare le colonne più di 8.000 byte come BLOB e provare a associarle a un ISequentialStream oggetto . Tuttavia, è possibile specificare un valore diverso in modo che sia la dimensione DEL BLOB.

È anche possibile specificare come CDynamicAccessor gestisce i dati delle colonne qualificati come dati BLOB: può gestire i dati BLOB nel modo predefinito, ignorare (non associare) i dati BLOB oppure associare i dati BLOB nella memoria allocata dal provider.

CDynamicAccessor::Close

Annulla l'associazione di tutte le colonne, rilascia la memoria allocata e rilascia il puntatore dell'interfaccia IAccessor nella classe .

Sintassi

void Close() throw();

CDynamicAccessor::GetBlobHandling

Recupera il valore di gestione BLOB per la riga corrente.

Sintassi

const DBBLOBHANDLINGENUM GetBlobHandling() const;

Osservazioni:

Restituisce il valore di gestione BLOB eBlobHandling impostato da SetBlobHandling.

CDynamicAccessor::GetBlobSizeLimit

Recupera le dimensioni massime del BLOB in byte.

Sintassi

const DBLENGTH GetBlobSizeLimit() const;

Osservazioni:

Restituisce il valore di gestione BLOB nBlobSize impostato da SetBlobSizeLimit.

CDynamicAccessor::GetBookmark

Recupera il segnalibro per la riga corrente.

Sintassi

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

Parametri

pBookmark
[out] Puntatore all'oggetto CBookmark .

Valore restituito

Uno dei valori HRESULT standard.

Osservazioni:

È necessario impostare su DBPROP_IRowsetLocate VARIANT_TRUE per recuperare un segnalibro.

CDynamicAccessor::GetColumnCount

Recupera il numero di colonne.

Sintassi

DBORDINAL GetColumnCount() const throw();

Valore restituito

Numero di colonne recuperate.

CDynamicAccessor::GetColumnFlags

Recupera le caratteristiche della colonna.

Sintassi

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

Parametri

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

pFlags
[out] Puntatore a una maschera di bit che descrive le caratteristiche delle colonne. Vedere "Tipo enumerato DBCOLUMNFLAGS" in IColumnsInfo::GetColumnInfo nella guida di riferimento per programmatori OLE DB.

Valore restituito

Restituisce true se le caratteristiche della colonna vengono recuperate correttamente. In caso contrario, viene restituito false.

Osservazioni:

Il numero di colonna è scostato da uno. La colonna zero è un caso speciale; è il segnalibro, se disponibile.

CDynamicAccessor::GetColumnInfo

Restituisce i metadati di colonna necessari per la maggior parte dei consumer.

Sintassi

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

Parametri

pRowset
[in] Puntatore all'interfaccia IRowset .

pColumns
[out] Puntatore alla memoria in cui restituire il numero di colonne nel set di righe; questo numero include la colonna segnalibro, se presente.

ppColumnInfo
[out] Puntatore alla memoria in cui restituire una matrice di DBCOLUMNINFO strutture. Vedere "Strutture DBCOLUMNINFO" in IColumnsInfo::GetColumnInfo nella guida di riferimento per programmatori OLE DB.

ppStringsBuffer
[out] Puntatore alla memoria in cui restituire un puntatore all'archiviazione per tutti i valori stringa (nomi usati all'interno di columnid o per pwszName) all'interno di un singolo blocco di allocazione.

Valore restituito

Uno dei valori HRESULT standard.

Osservazioni:

Per informazioni sui tipi di DBORDINALdati , , DBCOLUMNINFOe OLECHAR, vedere IColumnsInfo::GetColumnInfo nella guida di riferimento per programmatori OLE DB.

CDynamicAccessor::GetColumnName

Recupera il nome della colonna specificata.

Sintassi

LPOLESTR GetColumnName(DBORDINAL nColumn) const throw();

Parametri

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

Valore restituito

Nome della colonna specificata.

CDynamicAccessor::GetColumnType

Recupera il tipo di dati di una colonna specificata.

Sintassi

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

Parametri

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

pType
[out] Puntatore al tipo di dati della colonna specificata.

Valore restituito

Restituisce true in caso di esito positivo o false negativo.

CDynamicAccessor::GetLength

Recupera la lunghezza della colonna specificata.

Sintassi

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();

Parametri

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

pColumnName
[in] Puntatore a una stringa di caratteri che contiene il nome della colonna.

pLength
[out] Puntatore all'intero contenente la lunghezza della colonna in byte.

Valore restituito

Restituisce true se viene trovata la colonna specificata. In caso contrario, questa funzione restituisce false.

Osservazioni:

Il primo override accetta il numero di colonna e il secondo e il terzo sostituisce rispettivamente il nome della colonna in formato ANSI o Unicode.

CDynamicAccessor::GetOrdinal

Recupera il numero di colonna dato il nome di una colonna.

Sintassi

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

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

Parametri

pColumnName
[in] Puntatore a una stringa di caratteri che contiene il nome della colonna.

pOrdinal
[out] Puntatore al numero di colonna.

Valore restituito

Restituisce true se viene trovata una colonna con il nome specificato. In caso contrario, questa funzione restituisce false.

CDynamicAccessor::GetStatus

Recupera lo stato della colonna specificata.

Sintassi

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();

Parametri

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

pColumnName
[in] Puntatore a una stringa di caratteri che contiene il nome della colonna.

pStatus
[out] Puntatore alla variabile contenente lo stato della colonna. Per altre informazioni, vedere DBSTATUS nella guida di riferimento per programmatori OLE DB.

Valore restituito

Restituisce true se viene trovata la colonna specificata. In caso contrario, questa funzione restituisce false.

CDynamicAccessor::GetValue

Recupera i dati per una colonna specificata.

Sintassi

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();

Parametri

ctype
[in] Parametro basato su modelli che gestisce qualsiasi tipo di dati ad eccezione dei tipi stringa (CHAR*, WCHAR*), che richiedono una gestione speciale. GetValue usa il tipo di dati appropriato in base a quanto specificato qui.

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

pColumnName
[in] Nome della colonna.

pData
[out] Puntatore al contenuto della colonna specificata.

Valore restituito

Se si desidera passare dati stringa, usare le versioni non correlate di GetValue. Le versioni non correlate di questo metodo restituiscono void*, che punta alla parte del buffer che contiene i dati di colonna specificati. Restituisce NULL se la colonna non viene trovata.

Per tutti gli altri tipi di dati, è più semplice usare le versioni con modello di GetValue. Le versioni con modello restituiscono true l'esito positivo o false negativo.

Osservazioni:

Utilizzare le versioni non correlate per restituire colonne che contengono stringhe e versioni con modelli per le colonne che contengono altri tipi di dati.

In modalità di debug si otterrà un'asserzione se le dimensioni di pData non sono uguali alle dimensioni della colonna a cui punta.

CDynamicAccessor::SetBlobHandling

Imposta il valore di gestione BLOB per la riga corrente.

Sintassi

bool SetBlobHandling(DBBLOBHANDLINGENUM eBlobHandling);

Parametri

eBlobHandling
Specifica la modalità di gestione dei dati BLOB. I valori possibili sono i seguenti:

  • DBBLOBHANDLING_DEFAULT: gestire dati di colonna superiori a nBlobSize (come impostati da SetBlobSizeLimit) come dati BLOB e recuperarli tramite un ISequentialStream oggetto o IStream . Questa opzione tenterà di associare ogni colonna contenente dati di dimensioni superiori a nBlobSize o elencate come DBTYPE_IUNKNOWN come dati BLOB.

  • DBBLOBHANDLING_NOSTREAMS: gestire i dati delle colonne superiori a nBlobSize (come impostati da SetBlobSizeLimit) come dati BLOB e recuperarli tramite riferimento nella memoria di proprietà del provider allocata dal provider. Questa opzione è utile per le tabelle con più colonne BLOB e il provider supporta un ISequentialStream solo oggetto per ogni funzione di accesso.

  • DBBLOBHANDLING_SKIP: ignorare (non associare) colonne qualificate come BLOB contenenti (la funzione di accesso non eseguirà il binding o recupererà il valore della colonna, ma recupererà comunque lo stato e la lunghezza della colonna).

Osservazioni:

È consigliabile chiamare SetBlobHandling prima di chiamare Open.

Il metodo del costruttore CDynamicAccessor imposta il valore di gestione BLOB su DBBLOBHANDLING_DEFAULT.

CDynamicAccessor::SetBlobSizeLimit

Imposta le dimensioni massime del BLOB in byte.

Sintassi

void SetBlobSizeLimit(DBLENGTH nBlobSize);

Parametri

nBlobSize
Specifica il limite di dimensioni BLOB.

Osservazioni:

Imposta le dimensioni massime del BLOB in byte; i dati di colonna maggiori di questo valore vengono considerati come BLOB. Alcuni provider offrono dimensioni estremamente grandi per le colonne (ad esempio 2 GB). Invece di tentare di allocare memoria per una colonna di questa dimensione, in genere si tenta di associare queste colonne come BLOB. In questo modo non è necessario allocare tutta la memoria, ma è comunque possibile leggere tutti i dati senza paura del troncamento. Esistono tuttavia alcuni casi in cui è possibile forzare CDynamicAccessor l'associazione di colonne di grandi dimensioni nei tipi di dati nativi. A tale scopo, chiamare prima di chiamare SetBlobSizeLimit Open.

Il metodo del costruttore CDynamicAccessor imposta le dimensioni massime del BLOB su un valore predefinito di 8.000 byte.

CDynamicAccessor::SetLength

Imposta la lunghezza della colonna specificata.

Sintassi

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

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

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

Parametri

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

nLength
[in] Lunghezza della colonna in byte.

pColumnName
[in] Puntatore a una stringa di caratteri che contiene il nome della colonna.

Valore restituito

Restituisce true se la lunghezza della colonna specificata è impostata correttamente. In caso contrario, questa funzione restituisce false.

CDynamicAccessor::SetStatus

Imposta lo stato della colonna specificata.

Sintassi

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

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

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

Parametri

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

status
[in] Stato della colonna. Per altre informazioni, vedere DBSTATUS nella guida di riferimento per programmatori OLE DB.

pColumnName
[in] Puntatore a una stringa di caratteri che contiene il nome della colonna.

Valore restituito

Restituisce true se lo stato della colonna specificato è impostato correttamente. In caso contrario, questa funzione restituisce false.

CDynamicAccessor::SetValue

Archivia i dati in una colonna specificata.

Sintassi

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( );

Parametri

ctype
[in] Parametro basato su modelli che gestisce qualsiasi tipo di dati ad eccezione dei tipi stringa (CHAR*, WCHAR*), che richiedono una gestione speciale. GetValue usa il tipo di dati appropriato in base a quanto specificato qui.

pColumnName
[in] Puntatore a una stringa di caratteri che contiene il nome della colonna.

data
[in] Puntatore alla memoria contenente i dati.

nColumn
[in] Numero di colonna. I numeri di colonna iniziano con 1. Il valore 0 fa riferimento alla colonna del segnalibro, se presente.

Valore restituito

Se si desidera impostare i dati stringa, usare le versioni non correlate di GetValue. Le versioni non correlate di questo metodo restituiscono void*, che punta alla parte del buffer che contiene i dati di colonna specificati. Restituisce NULL se la colonna non viene trovata.

Per tutti gli altri tipi di dati, è più semplice usare le versioni con modello di GetValue. Le versioni con modello restituiscono true l'esito positivo o false negativo.

Vedi anche

Modelli di consumer OLE DB
Riferimenti ai modelli consumer OLE DB
Classe CAccessor
Classe CDynamicParameterAccessor
Classe CManualAccessor