Przechodzenie testów zgodności z OLE DB
Aby dostawców bardziej spójny, Data Access SDK zawiera zestaw testów zgodności OLE DB.Testy sprawdzania wszystkich aspektów z dostawcą i zapewniają wystarczającą pewność, że oczekiwaniami działania Twój dostawca.Testy zgodności OLE DB można znaleźć na temat Microsoft Data Access SDK.Niniejszy podpunkt koncentruje się na rzeczy, które należy zrobić, aby przejść testy zgodności.Aby dowiedzieć się, jak uruchamianie testów zgodności OLE DB Zobacz SDK.
Uruchamianie testów zgodności
W Visual C++ 6.0 szablony dostawca OLE DB dodaje szereg funkcji Podłączanie do umożliwiają sprawdzanie właściwości i wartości.Większość tych funkcji dodanych w reakcji na testy zgodności.
[!UWAGA]
Musisz dodać kilka funkcji sprawdzania poprawności dla z dostawcą, aby przejść testy zgodności OLE DB.
Ten dostawca wymaga dwóch procedur sprawdzania poprawności.Pierwszy rutynowych, CRowsetImpl::ValidateCommandID, jest częścią klasy zestaw wierszy.Nazywa się podczas tworzenia zestawu wierszy za pomocą szablonów dostawcy.W przykładzie zastosowano to rutynowe konsumentów stwierdzić, że nie obsługuje indeksów.Pierwsze wywołanie ma na celu CRowsetImpl::ValidateCommandID (należy zauważyć, że dostawca używa _RowsetBaseClass element typedef dodane w planie interfejs dla CMyProviderRowset w Dostawca obsługę zakładek, więc nie trzeba wpisywać tej długiej linii argumenty szablonu).Następnie należy zwrócić DB_E_NOINDEX Jeśli parametr indeks nie jest wartości NULL (wskazuje to konsument chce użyć indeksu na NAS).Aby uzyskać więcej informacji na temat identyfikatorów poleceń, zobacz specyfikacja OLE DB i wyszukać IOpenRowset::OpenRowset.
Poniższy kod jest ValidateCommandID rutynowe sprawdzanie poprawności:
/////////////////////////////////////////////////////////////////////
// MyProviderRS.H
// Class: CMyProviderRowset
HRESULT ValidateCommandID(DBID* pTableID, DBID* pIndexID)
{
HRESULT hr = _RowsetBaseClass::ValidateCommandID(pTableID, pIndexID);
if (hr != S_OK)
return hr;
if (pIndexID != NULL)
return DB_E_NOINDEX; // Doesn't support indexes
return S_OK;
}
Wywołanie szablony dostawca OnPropertyChanged zawsze, gdy ktoś modyfikuje właściwość na dbpropzestaw_rowzestaw grupy.Jeśli chcesz obsługiwać właściwości dla innych grup, możesz dodać je do odpowiedniego obiektu (to znaczy, DBPROPSET_SESSION kontroli go w CMyProviderSession klasy).
Kod najpierw sprawdza, czy właściwość jest połączone z innym.Jeśli właściwość jest jest łączona, ustawia DBPROP_BOOKMARKS właściwości na wartość True.Dodatek C specyfikacji OLE DB zawiera informacje na temat właściwości.Te informacje również informuje, czy właściwość jest połączony łańcuchem z innym.
Możesz również dodać IsValidValue rutynowych w kodzie.Wywołanie szablony IsValidValue podczas ustawiania właściwości.Czy zastąpić tę metodę, jeśli wymagają dodatkowego przetworzenia, ustawiając wartość właściwości.Może mieć jedną z następujących metod dla każdego zestawu właściwości.
Wątki problemy
Domyślnie OLE DB Provider Kreator ATL OLE DB Provider kreatora generuje kod dostawcy do uruchomienia w modelu typu apartament.Jeśli użytkownik spróbuje uruchomić ten kod, z testów zgodności, otrzymujesz początkowo awarie.To jest ponieważ domyślnie Ltm.exe, narzędzie służące do uruchomienia testów zgodności OLE DB, aby zwolnić wątku.Kod OLE DB Provider Kreator domyślnie komórkowy model wydajność i łatwość obsługi.
Aby rozwiązać ten problem, należy zmienić LTM lub zmienić dostawcę.
Aby zmienić LTM do uruchomienia w apartamencie wątku tryb
W menu głównym LTM, kliknij przycisk Narzędzia, a następnie kliknij przycisk Opcje.
Na Ogólne karta, zmienić model wątka z Wolne wątki do Wątki w apartamencie.
Aby zmienić dostawcę do uruchamiania w jednowątkowym trybie pracy wolna:
W projekcie dostawcy, wyszukać wszystkie wystąpienia CComSingleThreadModel i zastąpić go z CComMultiThreadModel, które powinny być w nagłówkach źródło, sesji i zestaw wierszy danych.
W pliku .rgs, należy zmienić model wątka z mieszkania do obu.
Poprawne programowanie następujące zasady programowania za darmo gwintowane (czyli blokadę zapisu).