Создание объекта-получателя без помощи мастера
В следующем примере предполагается добавление поддержки объекта-получателя OLE DB для существующего проекта библиотеки ATL. При добавлении поддержки объекта-получателя OLE DB для существующего проекта библиотеки ATL необходимо запустить мастер приложения MFC, который создает всю необходимую поддержку и вызов процедур MFC, необходимых для выполнения приложения.
Добавление поддержки объекта-получателя OLE DB без использования мастера объекта-получателя OLE DB библиотеки ATL:
В файл Stdafx.h добавьте следующие операторы #include:
#include <atlbase.h> #include <atldbcli.h> #include <atldbsch.h> // if you are using schema templates
Объект-получатель обычно программно выполняет операции в следующем порядке:
Создает класс записи пользователя, который связывает столбцы с локальными переменными. В данном примере CMyTableNameAccessor является классом записи пользователя (см. раздел Записи пользователей). В данном классе содержится сопоставление столбцов и сопоставление параметров. Объявляет элемент данных в классе записи пользователя для каждого поля, которое было указано в сопоставлении столбцов; для каждого из этих элементов данных также декларируется элемент данных состояния и элемент данных длины. Дополнительные сведения см. в разделе Элементы данных состояния полей в сформированных мастером методах доступа.
Примечание
При создании своего собственного объекта-получателя переменные данных должны стоять перед переменными состояния и длины.
Создает экземпляр источника данных и сеанса. Определите, какой тип метода доступа и набора строк будет использоваться, а затем создайте экземпляр набора строк с помощью CCommand или CTable:
CDataSource ds; CSession ss; class CMyTableName : public CCommand<CAccessor<CMyTableNameAccessor> >
Вызывает CoInitialize для инициализации COM. Данный вызов обычно производится в основном коде. Примеры.
HRESULT hr = CoInitialize(NULL);
Вызывает CDataSource::Open или один из его вариантов.
Открывает подключение к источнику данных, открывает сеанс, открывает и выполняет инициализацию набора строк (если это команда, она выполняется):
hr = ds.Open(); hr = ss.Open(ds); hr = rs.Open(); // (Open also executes the command)
Задает параметры набора строк с помощью CDBPropSet::AddProperty и затем передает их в качестве параметра в rs.Open (не обязательно). Пример того, как это происходит, см. GetRowsetProperties в разделе Методы объекта-получателя, сформированные мастером.
Теперь можно использовать набор строк для загрузки или управления данными.
Закрывает подключение, сеанс и набор строк по завершении приложения:
rs.Close(); ss.Close(); ds.Close();
Если используется командная строка, возможно потребуется вызов ReleaseCommand после выполнения команды Close. Пример кода в CCommand::Close отображает порядок вызова команд Close и ReleaseCommand.
Вызывает CoUnInitialize, чтобы отменить инициализацию COM. Данный вызов обычно производится в основном коде.
CoUninitialize();