database_operatering.h:
#ifndef DATABASE_OPERATER_H
#define DATABASE_OPERATER_H
#define _AFXDLL
#include <afxdb.h>
#undef _AFXDLL
#include <list>
#include <string>
class DatabaseOperater
{
public:
DatabaseOperater();
~DatabaseOperater();
public:
bool open(const std::string & database_connect_string, HANDLE database_mutex);
void close();
public:
bool is_open() const;
bool is_okay() const;
const std::string & get_last_exception() const;
public:
bool update_table(const std::string & sql);
bool get_first_record(const std::string & sql, bool & has_record, const char * key, ...);
private:
void handle_exception(const char * file, const char * func, int line, const std::string & sql, CException * e);
private:
DatabaseOperater(const DatabaseOperater &);
DatabaseOperater & operator = (const DatabaseOperater &);
private:
bool m_is_ok;
bool m_is_open;
std::string m_last_exception;
CDatabase m_database;
std::string m_database_connect_string;
HANDLE m_database_mutex;
};
#endif // DATABASE_OPERATER_H
database_operater.cpp:
#include "database_operater.h"
#include <cstdarg>
#include <new>
#include <iostream>
DatabaseOperater::DatabaseOperater()
: m_is_ok(true)
, m_is_open(false)
, m_last_exception()
, m_database()
, m_database_connect_string()
, m_database_mutex(NULL)
{
}
DatabaseOperater::~DatabaseOperater()
{
close();
}
bool DatabaseOperater::open(const std::string & database_connect_string, HANDLE database_mutex)
{
if (m_is_open)
{
return(database_connect_string == m_d