Выбор подходящего метода доступа
Определить типы данных набора строк можно либо при компиляции, либо при выполнении.
Если требуется определить типы данных набора строк при компиляции, используйте класс статического доступа (например, CAccessor). Задать типы данных можно вручную или с помощью мастера потребителей OLE DB библиотеки ATL.
Если требуется определить типы данных набора строк при выполнении, используйте класс динамического доступа (CDynamicAccessor или производные от него классы), либо класс ручного доступа (CManualAccessor). В этих случаях для набора строк можно вызвать функцию GetColumnInfo, которая вернет информацию о привязке столбцов, в том числе и типы данных.
В следующей таблице приведен список типов доступа, предоставляемых в шаблонах потребителей. Каждый класс доступа имеет определенные достоинства и недостатки. В каждой конкретной ситуации будет оптимальным тот или иной тип доступа.
Класс доступа |
Привязка |
Параметр |
Комментарий |
---|---|---|---|
CAccessor |
Создайте запись пользователя с помощью макроса COLUMN_ENTRY. Этот макрос привязывает поле данных записи к объекту доступа. После создания набора строк привязка столбцов не может быть отменена. |
Да, с помощью записи макроса BEGIN_PARAM_MAP. После создания привязка параметров не может быть отменена. |
Самый быстрый класс доступа из-за небольшого объема кода. |
CDynamicAccessor |
Автоматическая. |
Нет. |
Полезен, если неизвестен тип данных набора строк. |
CDynamicParameterAccessor |
Автоматическая, но может быть переопределена. |
Да, если поставщик поддерживает интерфейс ICommandWithParameters. Параметры привязываются автоматически. |
Медленнее, чем класс CDynamicAccessor, но полезен для вызова универсальных хранимых процедур. |
CDynamicStringAccessor[A,W] |
Автоматическая. |
Нет. |
Извлекает данные из хранилища данных в виде строковых данных. |
CManualAccessor |
Вручную, используя функцию AddBindEntry. |
Вручную, используя функцию AddParameterEntry. |
Очень быстрый; привязка параметров и столбцов выполняется лишь один раз. Тип используемых данных определяется пользователем. Пример DBVIEWER демонстрирует использование этого класса. Требует написания большего объема кода, чем классы CDynamicAccessor и CAccessor. Близок к непосредственному вызову функций OLE DB. |
CXMLAccessor |
Автоматическая. |
Нет. |
Извлекает данные из хранилища данных в виде строк и представляет их в XML-формате. |