Condividi tramite


Record utente

Per utilizzare una funzione di accesso statica, ovvero una funzione di accesso derivata da CAccessor, il consumer deve includere un record utente. Il record utente è una classe C++ che contiene dati per gestire l'input o l'output. La Creazione guidata consumer OLE DB ATL genera un record utente per il consumer. È possibile aggiungere metodi al record utente per ottenere funzionalità facoltative, ad esempio la gestione dei comandi.

Nel codice che segue viene mostrato un esempio di record che gestisce un comando. Nel record utente, BEGIN_COLUMN_MAP rappresenta un rowset di dati passato al consumer da un provider. BEGIN_PARAM_MAP rappresenta un set di parametri dei comandi. In questo esempio viene utilizzata una classe CCommand per gestire i parametri di comando. I membri dati nelle voci della mappa rappresentano gli offset in un blocco di memoria contiguo per ogni istanza della classe. Le macro COLUMN_ENTRY corrispondono alle macro PROVIDER_COLUMN_ENTRY del lato provider.

Per ulteriori informazioni sulle macro COLUMN_MAP e PARAM_MAP, vedere Macro per i modelli consumer OLE DB.

class CArtists
{
public:
// Data Elements
   CHAR m_szFirstName[20];
   CHAR m_szLastName[30];
   short m_nAge;
 
// Column binding map
BEGIN_COLUMN_MAP(CArtists)
   COLUMN_ENTRY(1, m_szFirstName)
   COLUMN_ENTRY(2, m_szLastName)
   COLUMN_ENTRY(3, m_nAge)
END_COLUMN_MAP()
 
// Parameter binding map
BEGIN_PARAM_MAP(CArtists)
   COLUMN_ENTRY(1, m_nAge)
END_PARAM_MAP()
};

Record utente generati mediante procedura guidata

Se si decide di generare un consumer mediante la Creazione guidata consumer OLE DB ATL, si può scegliere di utilizzare i modelli OLE DB oppure gli attributi OLE DB. Il codice generato per ciascuno dei casi sarà differente. Per ulteriori informazioni su tale codice, vedere Classi generate mediante la Creazione guidata consumer.

Supporto dei record utente per più funzioni di accesso

Per una discussione dettagliata sugli scenari in cui è necessario utilizzare più funzioni di accesso, vedere Utilizzo di più funzioni di accesso per un rowset.

Nell'esempio riportato di seguito viene illustrata la modifica del record utente necessaria per supportare più funzioni di accesso per il rowset. Anziché BEGIN_COLUMN_MAP e END_COLUMN_MAP, vengono utilizzate BEGIN_ACCESSOR_MAP e BEGIN_ACCESSOR per ogni funzione di accesso. La macro BEGIN_ACCESSOR specifica il numero della funzione di accesso (offset rispetto a zero) e se la funzione di accesso sia automatica o meno. Le funzioni di accesso automatiche chiamano GetData per recuperare i dati automaticamente con una chiamata a MoveNext. Le funzioni di accesso non automatiche richiedono invece il recupero esplicito dei dati. Si consiglia di utilizzare una funzione di accesso non automatica se si effettua l'associazione a un campo dati di grandi dimensioni, ad esempio un'immagine bitmap, che è preferibile non recuperare per ogni record.

class CMultiArtists
{
public:
// Data Elements
   CHAR m_szFirstName[20];
   CHAR m_szLastName[30];
   short m_nAge;
 
// Column binding map
BEGIN_ACCESSOR_MAP(CMultiArtists, 2)
   BEGIN_ACCESSOR(0, true)    // true specifies an auto accessor
    COLUMN_ENTRY(1, m_szFirstName)
    COLUMN_ENTRY(2, m_szLastName)
   END_ACCESSOR()
   BEGIN_ACCESSOR(1, false)   // false specifies a manual accessor
    COLUMN_ENTRY(3, m_nAge)
   END_ACCESSOR()
END_ACCESSOR_MAP()
};

Vedere anche

Concetti

Modelli consumer OLE DB (C++)