Rekordy użytkownika
Uwaga
Kreator konsumenta OLE DB ATL nie jest dostępny w programie Visual Studio 2019 i nowszych wersjach. Nadal można dodać funkcjonalność ręcznie. Aby uzyskać więcej informacji, zobacz Tworzenie konsumenta bez korzystania z Kreatora.
Aby użyć statycznej metody dostępu (czyli metody dostępu pochodzącej z CAccessor
programu ), użytkownik musi mieć rekord użytkownika. Rekord użytkownika to klasa języka C++, która zawiera elementy danych do obsługi danych wejściowych lub wyjściowych. Kreator konsumenta OLE DB ATL generuje rekord użytkownika dla użytkownika. Metody można dodawać do rekordu użytkownika na potrzeby opcjonalnych zadań, takich jak obsługa poleceń.
Poniższy kod przedstawia przykładowy rekord, który obsługuje polecenia. W rekordzie użytkownika BEGIN_COLUMN_MAP reprezentuje zestaw wierszy danych przekazany użytkownikowi od dostawcy. BEGIN_PARAM_MAP reprezentuje zestaw parametrów polecenia. W tym przykładzie użyto klasy CCommand do obsługi parametrów polecenia. Składowe danych w wpisach mapy reprezentują przesunięcie do jednego ciągłego bloku pamięci dla każdego wystąpienia klasy. Makra COLUMN_ENTRY odpowiadają makrom PROVIDER_COLUMN_ENTRY po stronie dostawcy.
Aby uzyskać więcej informacji na temat makr COLUMN_MAP i PARAM_MAP, zobacz Makra szablonów konsumentów 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()
};
Rekordy użytkowników wygenerowane przez kreatora
Jeśli do wygenerowania użytkownika używasz Kreatora konsumenta OLE DB ATL, możesz użyć szablonów OLE DB lub atrybutów OLE DB. Wygenerowany kod różni się w każdym przypadku. Aby uzyskać więcej informacji na temat tego kodu, zobacz Klasy generowane przez kreatora odbiorców.
Obsługa rekordów użytkownika dla wielu metod dostępu
Aby zapoznać się ze szczegółowym omówieniem scenariuszy, w których należy użyć wielu metod dostępu, zobacz Korzystanie z wielu metod dostępu w zestawie wierszy.
W poniższym przykładzie pokazano, że rekord użytkownika został zmodyfikowany w celu obsługi wielu metod dostępu w zestawie wierszy. Zamiast BEGIN_COLUMN_MAP i END_COLUMN_MAP używa BEGIN_ACCESSOR_MAP i BEGIN_ACCESSOR dla każdego akcesorium. Makro BEGIN_ACCESSOR określa numer dostępu (przesunięcie od zera) i czy akcesorium jest autoudostępem. Funkcja autoaktorów wywołuje funkcję GetData
w celu automatycznego pobierania danych w wywołaniu metody MoveNext. Nieautomatyczne metody dostępu wymagają jawnego pobrania danych. Użyj metody dostępu nieautomatycznego, jeśli wiążesz się z dużym polem danych (takim jak obraz mapy bitowej), którego możesz nie chcieć pobrać dla każdego rekordu.
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()
};