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 DBORDINAL
dati , , DBCOLUMNINFO
e 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 unISequentialStream
oggetto oIStream
. 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 unISequentialStream
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