dbmgr.cpp
上传用户:tt_chan
上传日期:2009-12-03
资源大小:4523k
文件大小:5k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "dbmgr.h"
  3. #include <stdio.h>
  4. static CDBManager s_dbManager;
  5. CDBManager::CDBManager()
  6. {
  7. m_dbMain.SetDiagRec( __cbDBMsg );
  8. m_dbMain.Init();
  9. }
  10. CDBManager::~CDBManager()
  11. {
  12. if ( m_pConn )
  13. m_dbMain.DestroyConnection( m_pConn );
  14. m_dbMain.Uninit();
  15. }
  16. bool CDBManager::Init( void (*pfnLog)( LPTSTR pMsg ), char *pDSN, char *pID, char *pPassword )
  17. {
  18. m_pfnLog = pfnLog;
  19. m_pConn  = m_dbMain.CreateConnection( pDSN, pID, pPassword );
  20. return m_pConn ? true : false;
  21. }
  22. CRecordset * CDBManager::CreateRecordset()
  23. {
  24. Lock();
  25. return m_pConn->CreateRecordset();
  26. }
  27. void CDBManager::DestroyRecordset( CRecordset *pRec )
  28. {
  29. m_pConn->DestroyRecordset( pRec );
  30. Unlock();
  31. }
  32. void CDBManager::__cbDBMsg( char *pState, int nNativeCode, char *pDesc )
  33. {
  34. static TCHAR szState[256], szDesc[2048];
  35. static TCHAR szMsg[2048];
  36. MultiByteToWideChar( CP_ACP, 0, pState, -1, szState, sizeof( szState ) / sizeof( TCHAR ) );
  37. MultiByteToWideChar( CP_ACP, 0, pDesc, -1, szDesc, sizeof( szDesc ) / sizeof( TCHAR ) );
  38. wsprintf( szMsg, _T("ODBC MsgID: %s(%d)"), szState, nNativeCode );
  39. GetDBManager()->m_pfnLog( szMsg );
  40. wsprintf( szMsg, _T("%s"), szDesc );
  41. GetDBManager()->m_pfnLog( szMsg );
  42. }
  43. CDBManager * GetDBManager()
  44. {
  45. return &s_dbManager;
  46. }
  47. CQueryManager::CQueryManager()
  48. {
  49. }
  50. CQueryManager::~CQueryManager()
  51. {
  52. m_listItem.ClearAll();
  53. }
  54. void CQueryManager::StartUpdateQuery( char *pTable, char *pCondition )
  55. {
  56. m_listItem.ClearAll();
  57. strcpy( m_szTable, pTable );
  58. strcpy( m_szCondition, pCondition );
  59. }
  60. char * CQueryManager::GetUpdateQuery()
  61. {
  62. sprintf( m_szQuery, "UPDATE %s SET ", m_szTable );
  63. CListNode< ITEM > *pNode = m_listItem.GetHead();
  64. if ( !pNode )
  65. return NULL;
  66. ITEM *pItem = pNode->GetData();
  67. strcat( m_szQuery, pItem->szName );
  68. strcat( m_szQuery, "=" );
  69. if ( pItem->bString )
  70. {
  71. strcat( m_szQuery, "'" );
  72. strcat( m_szQuery, pItem->szValue );
  73. strcat( m_szQuery, "'" );
  74. }
  75. else
  76. strcat( m_szQuery, pItem->szValue );
  77. for ( pNode = pNode->GetNext(); pNode; pNode = pNode->GetNext() )
  78. {
  79. pItem = pNode->GetData();
  80. strcat( m_szQuery, ", " );
  81. strcat( m_szQuery, pItem->szName );
  82. strcat( m_szQuery, "=" );
  83. if ( pItem->bString )
  84. {
  85. strcat( m_szQuery, "'" );
  86. strcat( m_szQuery, pItem->szValue );
  87. strcat( m_szQuery, "'" );
  88. }
  89. else
  90. strcat( m_szQuery, pItem->szValue );
  91. }
  92. strcat( m_szQuery, " WHERE " );
  93. strcat( m_szQuery, m_szCondition );
  94. return m_szQuery;
  95. }
  96. void CQueryManager::StartInsertQuery( char *pTable )
  97. {
  98. m_listItem.ClearAll();
  99. strcpy( m_szTable, pTable );
  100. }
  101. char * CQueryManager::GetInsertQuery()
  102. {
  103. sprintf( m_szQuery, "INSERT %s(", m_szTable );
  104. CListNode< ITEM > *pNode = m_listItem.GetHead();
  105. if ( !pNode )
  106. return NULL;
  107. ITEM *pItem = pNode->GetData();
  108. strcat( m_szQuery, pItem->szName );
  109. for ( pNode = pNode->GetNext(); pNode; pNode = pNode->GetNext() )
  110. {
  111. pItem = pNode->GetData();
  112. strcat( m_szQuery, ", " );
  113. strcat( m_szQuery, pItem->szName );
  114. }
  115. strcat( m_szQuery, ") VALUES( " );
  116. pNode = m_listItem.GetHead();
  117. pItem = pNode->GetData();
  118. if ( pItem->bString )
  119. {
  120. strcat( m_szQuery, "'" );
  121. strcat( m_szQuery, pItem->szValue );
  122. strcat( m_szQuery, "'" );
  123. }
  124. else
  125. strcat( m_szQuery, pItem->szValue );
  126. for ( pNode = pNode->GetNext(); pNode; pNode = pNode->GetNext() )
  127. {
  128. pItem = pNode->GetData();
  129. strcat( m_szQuery, ", " );
  130. if ( pItem->bString )
  131. {
  132. strcat( m_szQuery, "'" );
  133. strcat( m_szQuery, pItem->szValue );
  134. strcat( m_szQuery, "'" );
  135. }
  136. else
  137. strcat( m_szQuery, pItem->szValue );
  138. }
  139. strcat( m_szQuery, " )" );
  140. return m_szQuery;
  141. }
  142. void CQueryManager::InsertItem( char *pName, char *pValue, int nValueLen, bool bString )
  143. {
  144. ITEM *pItem = new ITEM;
  145. if ( !pItem )
  146. return;
  147. strcpy( pItem->szName, pName );
  148. strncpy( pItem->szValue, pValue, nValueLen );
  149. pItem->szValue[nValueLen] = '';
  150. pItem->bString = bString;
  151. m_listItem.Insert( pItem );
  152. }
  153. void CQueryManager::InsertItem( char *pName, TCHAR *pValue, bool bString )
  154. {
  155. ITEM *pItem = new ITEM;
  156. if ( !pItem )
  157. return;
  158. strcpy( pItem->szName, pName );
  159. WideCharToMultiByte( CP_ACP, 0, pValue, -1, pItem->szValue, sizeof( pItem->szValue ), 0, 0 );
  160. pItem->bString = bString;
  161. m_listItem.Insert( pItem );
  162. }
  163. void CQueryManager::InsertItem( char *pName, char *pValue, bool bString )
  164. {
  165. ITEM *pItem = new ITEM;
  166. if ( !pItem )
  167. return;
  168. strcpy( pItem->szName, pName );
  169. strcpy( pItem->szValue, pValue );
  170. pItem->bString = bString;
  171. m_listItem.Insert( pItem );
  172. }
  173. void CQueryManager::InsertItem( char *pName, BYTE pValue )
  174. {
  175. ITEM *pItem = new ITEM;
  176. if ( !pItem )
  177. return;
  178. strcpy( pItem->szName, pName );
  179. pItem->szValue[0] = pValue;
  180. pItem->szValue[1] = '';
  181. pItem->bString = true;
  182. m_listItem.Insert( pItem );
  183. }
  184. void CQueryManager::InsertItem( char *pName, int nValue, bool bString )
  185. {
  186. ITEM *pItem = new ITEM;
  187. if ( !pItem )
  188. return;
  189. strcpy( pItem->szName, pName );
  190. itoa( nValue, pItem->szValue, 10 );
  191. pItem->bString = bString;
  192. m_listItem.Insert( pItem );
  193. }