Record utente
Nota
La Creazione guidata provider OLE DB ATL non è disponibile in Visual Studio 2019 e versioni successive.
Il record utente fornisce il codice e la struttura dei dati che rappresenta i dati della colonna per un set di righe. Un record utente può essere creato in fase di compilazione o in fase di esecuzione. Quando si crea un provider tramite la Creazione guidata provider OLE DB ATL, la procedura guidata crea un record utente predefinito simile al seguente (supponendo che venga specificato un nome di provider [nome breve] MyProvider):
class CWindowsFile:
public WIN32_FIND_DATA
{
public:
BEGIN_PROVIDER_COLUMN_MAP(CMyProviderWindowsFile)
PROVIDER_COLUMN_ENTRY("FileAttributes", 1, dwFileAttributes)
PROVIDER_COLUMN_ENTRY("FileSizeHigh", 2, nFileSizeHigh)
PROVIDER_COLUMN_ENTRY("FileSizeLow", 3, nFileSizeLow)
PROVIDER_COLUMN_ENTRY_STR("FileName", 4, cFileName)
PROVIDER_COLUMN_ENTRY_STR("AltFileName", 5, cAlternateFileName)
END_PROVIDER_COLUMN_MAP()
};
I modelli di provider OLE DB gestiscono tutte le specifiche OLE DB nelle interazioni con il client. Per acquisire i dati della colonna necessari per una risposta, il provider chiama la funzione GetColumnInfo
, che è necessario inserire nel record utente. È possibile eseguire in modo esplicito l'override di GetColumnInfo
nel record utente, ad esempio dichiarandolo nel file con estensione h come illustrato di seguito:
template <class T>
static ATLCOLUMNINFO* GetColumnInfo(T* pThis, ULONG* pcCols)
Ciò equivale a:
static ATLCOLUMNINFO* GetColumnInfo(CommandClass* pThis, ULONG* pcCols)
static ATLCOLUMNINFO* GetColumnInfo(RowsetClass* pThis, ULONG* pcCols)
Implementare quindi GetColumnInfo
nel file con estensione cpp del record utente.
Le macro PROVIDER_COLUMN_MAP sono utili per la creazione di una funzione GetColumnInfo
:
BEGIN_PROVIDER_COLUMN_MAP definisce il prototipo di funzione e una matrice statica di strutture
ATLCOLUMNINFO
.PROVIDER_COLUMN_ENTRY definisce e inizializza un singolo oggetto
ATLCOLUMNINFO
.END_PROVIDER_COLUMN_MAP chiude la matrice e la funzione. Inserisce anche il numero di elementi della matrice nel parametro pcCols.
Quando un record utente viene creato in fase di esecuzione, GetColumnInfo
usa il pThis
parametro per ricevere un puntatore a un set di righe o a un'istanza del comando. I comandi e i set di righe devono supportare l'interfaccia IColumnsInfo
, in modo che le informazioni di colonna possano essere ricavate da questo puntatore.
CommandClass
e RowsetClass
sono il comando e il set di righe che usano il record utente.
Per un esempio più dettagliato di come eseguire l'override di GetColumnInfo
in un record utente, vedere Determinazione dinamica delle colonne restituite al consumer.