#ifndef __DATABASE_20201102__ #define __DATABASE_20201102__ #pragma once #include "table.h" class CDatabase { public: CDatabase(); ~CDatabase(); protected: private: MYSQL* m_pConn; BOOL m_bConnected; const char* m_pError; std::string m_strUser; std::string m_strPassword; std::string m_strHost; static char* m_spImage; // 该函数只能单线程使用; static char* ConvertBinaryToString(MYSQL *pConn, std::string file) { if (m_spImage != NULL) delete[]m_spImage; m_spImage = NULL; if (!PathFileExists(file.c_str())) return NULL; FILE* pf = NULL; if (0 != fopen_s(&pf, file.c_str(), _T("rb"))) return NULL; if (pf == NULL) return NULL; fseek(pf, 0, SEEK_END); long nlen = ftell(pf); fseek(pf, 0, SEEK_SET); byte *pData = new byte[nlen]; fread(pData, nlen, 1, pf); fclose(pf); m_spImage = new char[nlen + 10]; mysql_real_escape_string(pConn, m_spImage, (char*)pData, nlen); if (pData) delete[]pData; return m_spImage; } public: BOOL SetBinaryField(std::string strCondition, void* pDataIn, int nDataLen); BOOL GetBinaryField(std::string strCondition, void** lpDataOut, unsigned long &nDataLen); // 初始化连接; BOOL Init(std::string host, std::string user, std::string password, std::string db); // 执行语句; BOOL ExcuteSQL(std::string sql); // 供应商表; BOOL InserProvider(const STProvider& provider); BOOL InserProvider(std::string name, std::string note); BOOL DeleteProvider(std::string name); BOOL UpdateProvider(std::string name, const STProvider &provider); BOOL QueryProvider(std::vector& vtProvider); // 机芯表; BOOL InserSoc(const STSOC& soc); BOOL InserSoc(std::string name, std::string provider, std::string note); BOOL DeleteSoc(std::string name); BOOL UpdateSoc(std::string name, const STSOC& soc); BOOL QuerySoc(std::vector& vtSoc); // 品牌表; BOOL InsertBrand(const STBranch& brand); BOOL InsertBrand(std::string name, std::string note); BOOL DeleteBrand(std::string name); BOOL UpdateBrand(std::string name, const STBranch& brand); BOOL QueryBrand(std::vector& vtBrand); // 导入/导出品牌logo; BOOL ImportLogo(std::string name, std::string file); BOOL ExportLogo(std::string name, std::string file); // 季度表; BOOL InsertQuarter(const STQuarter& quarter); BOOL InsertQuarter(std::string name, std::string scp, std::string note); BOOL DeleteQuarter(std::string name); BOOL UpdateQuarter(std::string name, const STQuarter& quarter); BOOL QueryQuarter(std::vector& vtQuarter); // 服务器表; BOOL InsertServer(const STServer& Server); BOOL InsertServer(std::string name, std::string ip, std::string type, std::string user, std::string password, std::string note); BOOL DeleteServer(std::string name); BOOL UpdateServer(std::string name, const STServer& Server); BOOL QueryServer(std::vector& vtServer); }; #endif