Database.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. #include "pch.h"
  2. #include "Database.h"
  3. #define CHECKDB if (m_pConn == NULL || !m_bConnected) return FALSE
  4. CDatabase::CDatabase():m_pConn(NULL), m_pError(NULL), m_bConnected(FALSE)
  5. {
  6. m_pConn = mysql_init(NULL);
  7. }
  8. CDatabase::~CDatabase()
  9. {
  10. mysql_close(m_pConn);
  11. mysql_library_end();
  12. }
  13. BOOL CDatabase::Init(std::string host, std::string user, std::string password, std::string db)
  14. {
  15. if (!m_pConn)
  16. return FALSE;
  17. m_pError = mysql_error(m_pConn);
  18. if (!mysql_real_connect(m_pConn, host.c_str(), user.c_str(), password.c_str(), db.c_str(), 0, NULL, 0)) {
  19. #ifdef _DEBUG
  20. TRACE1(_T("mysql_real_connect error=%s\n"), m_pError ? m_pError: "");
  21. #endif
  22. return FALSE;
  23. }
  24. return m_bConnected = TRUE;
  25. }
  26. BOOL CDatabase::ExcuteSQL(std::string sql)
  27. {
  28. if (m_pConn == NULL || !m_bConnected)
  29. return FALSE;
  30. if (0 != mysql_query(m_pConn, sql.c_str())) {
  31. #ifdef _DEBUG
  32. TRACE1(_T("ExcuteSQL error=%s\n"), m_pError ? m_pError : "");
  33. #endif
  34. return FALSE;
  35. }
  36. return TRUE;
  37. }
  38. BOOL CDatabase::InserProvider(const STProvider& provider)
  39. {
  40. CHECKDB;
  41. TCHAR szSql[MAX_PATH] = {0};
  42. _stprintf_s(szSql, INSER_PROVIDER, provider.name.c_str(), provider.note.c_str());
  43. if (0 != mysql_query(m_pConn, szSql)) {
  44. #ifdef _DEBUG
  45. TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
  46. #endif
  47. return FALSE;
  48. }
  49. return TRUE;
  50. }
  51. BOOL CDatabase::InserProvider(std::string name, std::string note)
  52. {
  53. CHECKDB;
  54. TCHAR szSql[MAX_PATH] = { 0 };
  55. _stprintf_s(szSql, INSER_PROVIDER, name.c_str(), note.c_str());
  56. if (0 != mysql_query(m_pConn, szSql)) {
  57. #ifdef _DEBUG
  58. TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
  59. #endif
  60. return FALSE;
  61. }
  62. return TRUE;
  63. }
  64. BOOL CDatabase::DeleteProvider(std::string name)
  65. {
  66. CHECKDB;
  67. TCHAR szSql[MAX_PATH] = { 0 };
  68. _stprintf_s(szSql, DEL_PROVIDER, name.c_str());
  69. if (0 != mysql_query(m_pConn, szSql)) {
  70. #ifdef _DEBUG
  71. TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
  72. #endif
  73. return FALSE;
  74. }
  75. return TRUE;
  76. }
  77. BOOL CDatabase::UpdateProvider(std::string name, const STProvider& provider)
  78. {
  79. CHECKDB;
  80. TCHAR szSql[MAX_PATH] = { 0 };
  81. _stprintf_s(szSql, MOD_PROVIDER, provider.name.c_str(), provider.note.c_str(), name.c_str());
  82. if (0 != mysql_query(m_pConn, szSql)) {
  83. #ifdef _DEBUG
  84. TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
  85. #endif
  86. return FALSE;
  87. }
  88. return TRUE;
  89. }
  90. BOOL CDatabase::QueryProvider(std::vector<STProvider>& vtProvider)
  91. {
  92. CHECKDB;
  93. if (0 != mysql_query(m_pConn, QUERY_PROVIDER)) {
  94. #ifdef _DEBUG
  95. TRACE1(_T("QueryProvider error=%s\n"), m_pError ? m_pError : "");
  96. #endif
  97. return FALSE;
  98. }
  99. // 获取表数据;
  100. MYSQL_RES* pData = mysql_store_result(m_pConn);
  101. if ( pData == NULL ) {
  102. #ifdef _DEBUG
  103. TRACE1(_T("QueryProvider error=%s\n"), m_pError ? m_pError : "");
  104. #endif
  105. return FALSE;
  106. }
  107. #ifdef _DEBUG
  108. // 统计表字段;
  109. unsigned int nLen = mysql_num_fields(pData);
  110. // 字段长度是否一致;
  111. if (nLen != 2) {
  112. mysql_free_result(pData);
  113. return FALSE;
  114. }
  115. // 打印出字段名称;
  116. TCHAR szLog[MAX_PATH] = {0};
  117. for ( int i = 0; i < nLen; i++ ) {
  118. _stprintf_s(szLog, _T("字段名称:%s\n"), mysql_fetch_field(pData)->name);
  119. OutputDebugString(szLog);
  120. }
  121. #endif
  122. // 遍历数据;
  123. MYSQL_ROW row;
  124. while ( (row = mysql_fetch_row(pData)) != NULL ) {
  125. STProvider provider;
  126. provider.name = row[0];
  127. provider.note = row[1];
  128. vtProvider.push_back(provider);
  129. }
  130. // 释放内存;
  131. mysql_free_result(pData);
  132. return TRUE;
  133. }
  134. BOOL CDatabase::InsertBrand(const STBranch& brand)
  135. {
  136. CHECKDB;
  137. TCHAR szSql[MAX_PATH] = { 0 };
  138. _stprintf_s(szSql, INSER_BRAND, brand.name.c_str(), brand.note.c_str());
  139. if (0 != mysql_query(m_pConn, szSql)) {
  140. #ifdef _DEBUG
  141. TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
  142. #endif
  143. return FALSE;
  144. }
  145. return TRUE;
  146. }
  147. BOOL CDatabase::InsertBrand(std::string name, std::string note)
  148. {
  149. CHECKDB;
  150. TCHAR szSql[MAX_PATH] = { 0 };
  151. _stprintf_s(szSql, INSER_BRAND, name.c_str(), note.c_str());
  152. if (0 != mysql_query(m_pConn, szSql)) {
  153. #ifdef _DEBUG
  154. TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
  155. #endif
  156. return FALSE;
  157. }
  158. return TRUE;
  159. }
  160. BOOL CDatabase::DeleteBrand(std::string name)
  161. {
  162. CHECKDB;
  163. TCHAR szSql[MAX_PATH] = { 0 };
  164. _stprintf_s(szSql, DEL_BRAND, name.c_str());
  165. if (0 != mysql_query(m_pConn, szSql)) {
  166. #ifdef _DEBUG
  167. TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
  168. #endif
  169. return FALSE;
  170. }
  171. return TRUE;
  172. }
  173. BOOL CDatabase::UpdateBrand(std::string name, const STBranch& brand)
  174. {
  175. CHECKDB;
  176. TCHAR szSql[MAX_PATH] = { 0 };
  177. _stprintf_s(szSql, MOD_BRAND, name.c_str(), brand.name.c_str(), brand.note.c_str());
  178. if (0 != mysql_query(m_pConn, szSql)) {
  179. #ifdef _DEBUG
  180. TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
  181. #endif
  182. return FALSE;
  183. }
  184. return TRUE;
  185. }
  186. BOOL CDatabase::InsertQuarter(const STQuarter& quarter)
  187. {
  188. CHECKDB;
  189. TCHAR szSql[MAX_PATH] = { 0 };
  190. _stprintf_s(szSql, INSER_QUARTER, quarter.name.c_str(), quarter.scp.c_str(), quarter.note.c_str());
  191. if (0 != mysql_query(m_pConn, szSql)) {
  192. #ifdef _DEBUG
  193. TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
  194. #endif
  195. return FALSE;
  196. }
  197. return TRUE;
  198. }
  199. BOOL CDatabase::InsertQuarter(std::string name, std::string scp, std::string note)
  200. {
  201. CHECKDB;
  202. TCHAR szSql[MAX_PATH] = { 0 };
  203. _stprintf_s(szSql, INSER_QUARTER, name.c_str(), scp.c_str(), note.c_str());
  204. if (0 != mysql_query(m_pConn, szSql)) {
  205. #ifdef _DEBUG
  206. TRACE1(_T("InserProvider error=%s\n"), m_pError ? m_pError : "");
  207. #endif
  208. return FALSE;
  209. }
  210. return TRUE;
  211. }
  212. BOOL CDatabase::DeleteQuarter(std::string name)
  213. {
  214. CHECKDB;
  215. TCHAR szSql[MAX_PATH] = { 0 };
  216. _stprintf_s(szSql, DEL_QUARTER, name.c_str());
  217. if (0 != mysql_query(m_pConn, szSql)) {
  218. #ifdef _DEBUG
  219. TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
  220. #endif
  221. return FALSE;
  222. }
  223. return TRUE;
  224. }
  225. BOOL CDatabase::UpdateQuarter(std::string name, const STQuarter& quarter)
  226. {
  227. CHECKDB;
  228. TCHAR szSql[MAX_PATH] = { 0 };
  229. _stprintf_s(szSql, MOD_QUARTER, name.c_str(), quarter.name.c_str(), quarter.scp.c_str(), quarter.note.c_str());
  230. if (0 != mysql_query(m_pConn, szSql)) {
  231. #ifdef _DEBUG
  232. TRACE1(_T("DeleteProvider error=%s\n"), m_pError ? m_pError : "");
  233. #endif
  234. return FALSE;
  235. }
  236. return TRUE;
  237. }