Московский государственный университет имени М.В.Ломоносова
Опубликован: 20.12.2005 | Доступ: свободный | Студентов: 3142 / 371 | Оценка: 4.22 / 3.86 | Длительность: 12:03:00
ISBN: 978-5-9556-0068-0
Лекция 11:

Реализация доступа к базам данных в среде VISUAL STUDIO.NET на языке С++ с применением ATL

< Лекция 10 || Лекция 11: 12345 || Лекция 12 >

Подключение к БД

Для подключения к базе данных следует создать объект типа 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.

< Лекция 10 || Лекция 11: 12345 || Лекция 12 >