Реализация доступа к базам данных в среде 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.
