Проверка на совместимость с OLE DB
Чтобы обеспечить согласованность поставщиков, пакет SDK для доступа к данным предоставляет набор тестов соответствия OLE DB. Тесты проверяют все аспекты поставщика и дают вам разумное подтверждение того, что ваш поставщик работает должным образом. Тесты соответствия OLE DB можно найти в пакете SDK microsoft Data Access. В этом разделе рассматриваются действия, которые необходимо выполнить для прохождения тестов соответствия. Сведения о выполнении тестов соответствия OLE DB см. в пакете SDK.
Выполнение тестов соответствия
В Visual C++ 6.0 шаблоны поставщиков OLE DB добавили ряд функций перехватчика, позволяющих проверять значения и свойства. Большинство этих функций были добавлены в ответ на тесты соответствия.
Примечание.
Необходимо добавить несколько функций проверки для поставщика, чтобы передать тесты соответствия OLE DB.
Для этого поставщика требуется две подпрограммы проверки. Первая подпрограмма , CRowsetImpl::ValidateCommandID
является частью класса набора строк. Он вызывается во время создания набора строк шаблонами поставщика. В примере используется эта подпрограмма, чтобы сообщить потребителям, что он не поддерживает индексы. Первый вызов заключается CRowsetImpl::ValidateCommandID
в том, чтобы (обратите внимание, что поставщик использует _RowsetBaseClass
типdef, добавленный в схему CCustomRowset
интерфейса для поддержки поставщиков закладок, поэтому вам не нужно вводить длинную строку аргументов шаблона). Затем верните DB_E_NOINDEX, если параметр индекса не имеет значения NULL (это означает, что потребитель хочет использовать индекс для нас). Дополнительные сведения об идентификаторах команд см. в спецификации OLE DB и поиске IOpenRowset::OpenRowset
.
Следующий код — это подпрограмма ValidateCommandID
проверки:
/////////////////////////////////////////////////////////////////////
// CustomRS.H
// Class: CCustomRowset
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;
}
Шаблоны поставщиков вызывают OnPropertyChanged
метод всякий раз, когда кто-то изменяет свойство в группе DBPROPSET_ROWSET. Если вы хотите обрабатывать свойства для других групп, добавьте их в соответствующий объект (т. е. DBPROPSET_SESSION проверки переходят в CCustomSession
класс).
Код сначала проверяет, связано ли свойство с другим. Если свойство цепочки, оно задает для True
свойства DBPROP_BOOKMARKS значение. Приложение C спецификации OLE DB содержит сведения о свойствах. Эта информация также указывает, подключено ли свойство к другому.
Также может потребоваться добавить подпрограмму IsValidValue
в код. Вызов шаблонов IsValidValue
при попытке задать свойство. Этот метод переопределится, если требуется дополнительная обработка при настройке значения свойства. Для каждого набора свойств можно использовать один из этих методов.