Реализация доступа к базам данных в среде VISUAL STUDIO.NET на языке С++ с применением ATL
Подключение к БД
Для подключения к базе данных следует создать объект типа CDataSource, затем объект типа CSession. Далее, уже используя объект "сеанс", можно реализовывать работу с таблицами базы данных.
В следующем примере иллюстрируется подключение к базе данных с использованием OLE DB провайдера, создание сеанса и получение доступа к таблице TBL1:
#include <atldbcli.h> CDataSource con; CSession session; CTable<CAccessor<CTBL1> > Tbl1; // Аксессор использует // класс записи CTBL1 // Устанавливаем соединение с базой данных con.Open(CLSID_MSDASQL,"MyDB1","user1","psw1"); // Создаем сеанс session.Open(connection); // Открываем таблицу c именем TBL1 (создаем результирующий набор). // Структура таблицы должна соответствовать классу записи CTBL1 Tbl1.Open(session, "TBL1"); // Извлекаем данные из результирующего набора while (Tbl1.MoveNext() == S_OK) { cout << Tbl1.m_szF1; // Записываем в стандартный // поток вывода значение // первого поля (класс CTBL1) cout << Tbl1.m_szF2; } // Класс записи CTBL1 class CTBL1 { public: // Поля записи CHAR m_szF1[10]; CHAR m_szF2[12]; short m_nF3; // Таблица связывания столбцов // Каждый вход таблицы сопоставляет номер столбца // с полем в классе записи. BEGIN_COLUMN_MAP(CTBL1) COLUMN_ENTRY(1, m_szF1) COLUMN_ENTRY(2, m_szF2) COLUMN_ENTRY(3, m_nF3) END_COLUMN_MAP()
Команды и таблицы
Классы команды и таблицы позволяют реализовывать доступ к результирующим наборам. Эти классы наследуются от класса CAccessorRowset, как это показано на следующей схеме:
В данной схеме TAccessor может быть любым допустимым типом аксессора, а TRowset - любым допустимым типом результирующего набора; TMultiple определяет тип результирующего набора (один или несколько).
В среде Visual Studio.NET мастер ATL OLE DB Consumer позволяет определить, какой класс будет использован для создания результирующего набора. Класс CTable следует применять в том случае, если результирующий набор только один и не требуется использование параметров.
Применение класса CCommand открывает более широкие возможности:
Открыть результирующий набор можно вызовом функции Open, а при необходимости многократного выполнения команды следует вызывать функцию Prepare.
Класс CCommand имеет три параметра шаблона: тип аксессора, тип результирующего набора и тип результата. Тип результата может указываться значением типа CNoMultipleResults (по умолчанию) или CMultipleResults.