Простые ODBC классы без использования MFC
Автор: Justin Kirby
Скачать исходники - 7 Kb
Описание
Мне пришлось написать довольно много
приложений связанных с базами данных.
Большинство из них было небольшими и
использовали MFC класс CRecordset.
Зависимость от MFC меня не всегда устраивала и
тогда я засел за создание собственного класса.
Таким образом появился набор, состоящий из
нескольких классов, обеспечивающий необходимые
возможности для работы с ODBC драйвером.
На самом деле эти классы не претендуют на что-то
"совершенное" и "мощное", однако они
могут очень даже пригодиться для тех кто захочет
работать с драйвером ODBC напрямую через API
функции.
В файлах ODBC.h и ODBC.cpp содержится три класса CODBCCnx, CODBCQuery и CODBCFatQuery.
Основным из них является CODBCCnx, который коннектится к DBMS, а так
же осуществляет все необходимые действия по
обработке запросов. CODBCQuery
и CODBCFatQuery являются
зарезервированными, и я планирую с их помощью
расширить возможности основного класса.
Класс CODBCCnx
CODBCCnx содержит три функции Connect(), Disconnect() и IsOk().
Функция Connect() позволяет связаться с
драйвером DSN или используя сетевое имя
компьютера.
//связываемся с DBMS через DSN, "foodsn"
CODBCCnx dsn();
dsn.Connect("foodsn","username","password");
//Замечание: CODBCCnx dsn("foodsn",username","password"); идентично предыдущей строке
//проверяем успешность соединения
if(!dsn.IsOk()){
//успешное соединение с базой
}
else{
//ошибка при соединении
}
//другой способ осуществления связи с базой данны, используя сетевое имя компьютера
CODBCCnx name("SQL Server","CompName","username","password");
//опять проверяем успешность соединения
if(!name.IsOk()){
//успешное соединение с базой
}
else{
//ошибка при соединении
}
Итак, мы соединились с базой данных, теперь
давайте попробуем завершить сеанс связи. Для
этого нам пригодится функция Disconnect(). В
параметрах этой функции можно задавать
различные параметры. Например, если транзакции
находятся в активном состоянии, то с помощь этих
параметров можно вернуть их в исходное
состояние, либо подождать их завершения. Если
вызвать функцию Disconnect,
без параметров, то все транзакции вернутся в
исходное состояние.
//завершаем сеанс связи (dsn)
dsn.Disconnect(); //возвращаем незавершённые транзакции в предыдущее состояние
//Замечание: dsn.Disconnect(SQL_ROLLBACK) тоже самое, что и предыдущая строка
//завершаем сеанс связи с базой "name"
name.Disconnect(SQL_COMMIT); //завершаем все незавершённые транзакции
Класс CODBCQuery
Итак, мы рассмотрели основные действия для
общения с базой данных. Но есть ещё один момент.
Не полохо было бы работать с объектом, созданным
ранее, через указатели, то есть сделать его
доступным из других классов. Для этого был создан
класс CODBCQuery. CODBCQuery не
может использоваться как самостоятельный
объект, он постоянно привязан к основному классу:
//Устанавливаем соединение, используя dsn
CODBCCnx *pDsn = new CODBCCnx("foodsn", "username", "password");
CODBCQuery qry1, qry2;
if(!pDsn->IsOk())
{
//успешный коннект!! теперь дадим в доступ данный сеанс связи :)
pDsn->Connect(qry1.h_qstmt);
pDsn->Connect(qry2.h_qstmt);
}
else{
//ошибка
}
//так же эту процедуру можно совешнить за один шаг.
CODBCQuery qry(new CODBCCnx("foodsn", "username", "password"), true);
//либо мы можем брать pDsn и передавать его в связку новых объектов
CODBCQuery qry2(pDsn), qry3(pDsn,false);
//либо можно заставить класс CODBCQuery самостоятельно коннектиться
CODBCQuery qry4("SQL Server", "CompName", "username", "password");
//используя DSN
CODBCQuery qry5(NULL, "foodsn", "username", "password");
Заключительная заметка: существует глобальная
функция SQLSuccess(). Если передать в неё
переменную SQLRETURN, то функция вернёт не
нулевое значение, если в этой переменной указать
значение SQL_SUCCESS или SQL_SUCCESS_WITH_INFO.
Иногда возвращаемая информация бывает очень
даже полезной.
В дополнение
В архиве содержатся два файла strutil.h и strutil.cpp. Это
очень простые функции имеющие тип char*.
Меня раздражает постоянная необходимость по
выделению памяти для strcpy, и т.д...
Поэтому мне больше подходят эти две функции
взамен стандартных. Их названия начинаются с
jkl_str. Надеюсь, они Вам понравятся :).
|