123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- #include "StdAfx.h"
- #include "ODBCImpl.h"
- CODBCImpl::CODBCImpl(void)
- {
- m_bOpen = FALSE;
- m_pdbInstance = NULL;
- m_hReConnectEvent = NULL;
- m_hReConnectThread = NULL;
- }
- CODBCImpl::~CODBCImpl(void)
- {
- DisConnectDataBase();
- }
- BOOL CODBCImpl::SolveDBError(CONST DWORD &dwError,LPCTSTR lpErrorString)
- {
- AutoThreadSection aSection(&s_critSection);
- if(m_bSolve) return TRUE;
- switch(dwError)
- {
- case ERROR_PIPE_NOT_CONNECTED:
- case WSAECONNRESET:
- case WSAECONNABORTED:
- {
- m_bSolve = TRUE;
-
- DisConnectDataBase();
-
-
- }
- break;
- default:
-
-
- break;
- }
- return FALSE;
- }
- int CODBCImpl::StartThread()
- {
- if(m_hReConnectEvent == NULL)
- m_hReConnectEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
- if (m_hReConnectEvent == NULL)
- {
- m_bSolve = FALSE;
- return -1;
- }
- if(m_hReConnectThread == NULL)
- m_hReConnectThread = CreateThread(NULL, 0, ReConnectDatabaseThread, this, 0, NULL);
- if (m_hReConnectThread == NULL)
- {
- m_bSolve = FALSE;
- return -1;
- }
- else
- {
- CloseHandle(m_hReConnectThread);
- m_hReConnectThread = NULL;
- }
- return 0;
- }
- int CODBCImpl::EndofThread()
- {
- if (m_hReConnectEvent)
- SetEvent(m_hReConnectEvent);
- if (m_hReConnectThread)
- {
- if (WaitForSingleObject(m_hReConnectThread, INFINITE) != WAIT_TIMEOUT)
- CloseHandle(m_hReConnectThread);
- m_hReConnectThread = NULL;
- }
- if (m_hReConnectEvent)
- CloseHandle(m_hReConnectEvent);
- m_hReConnectEvent = NULL;
- return 0L;
- }
- DWORD CODBCImpl::ReConnectDatabaseThread(LPVOID lpPara)
- {
- CODBCImpl *pInstance = (CODBCImpl*)lpPara;
- do
- {
- if( pInstance->ConnectToDataBase())
- {
- pInstance->m_bSolve = FALSE;
- break;
- }
- } while (WaitForSingleObject(pInstance->m_hReConnectEvent,5000L) == WAIT_TIMEOUT);
- if (pInstance->m_hReConnectEvent)
- CloseHandle(pInstance->m_hReConnectEvent);
- pInstance->m_hReConnectEvent = NULL;
- return 0L;
- }
- BOOL CODBCImpl::ConnectToDataBase( IN LPCTSTR lpConnString )
- {
- AutoThreadSection aSection(&s_critSection);
- if (m_pdbInstance == NULL)
- {
- m_pdbInstance = new CDatabase;
- TCHAR szConnString[MAX_PATH] = {0};
- if (lpConnString == NULL)
- {
- _stprintf_s(szConnString, _T("%s"), m_szConnectString);
- }
- else
- {
- _stprintf_s(m_szConnectString, _T("%s"), lpConnString);
- _stprintf_s(szConnString, _T("%s"), lpConnString);
- }
- try
- {
- m_pdbInstance->OpenEx(szConnString, CDatabase::noOdbcDialog);
- }
- catch (CDBException* e)
- {
- delete m_pdbInstance;
- m_pdbInstance = NULL;
- e->Delete();
- return FALSE;
- }
- m_bOpen = TRUE;
- }
- return m_bOpen;
- }
- void CODBCImpl::DisConnectDataBase()
- {
- m_bOpen = FALSE;
- if (m_pdbInstance)
- delete m_pdbInstance;
- m_pdbInstance = NULL;
- }
- BOOL CODBCImpl::ExecuteSQL( IN LPCTSTR lpSQL )
- {
- try
- {
- AutoThreadSection aSection(&s_critSection);
- if (!m_bOpen) return FALSE;
-
- m_pdbInstance->ExecuteSQL(lpSQL);
-
- }
- catch (CDBException* e)
- {
-
- SolveDBError(GetLastError(),e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- INT CODBCImpl::GetTblRecordCount(IN LPCTSTR lpTblName, IN LPCTSTR lpFilters)
- {
- try
- {
- AutoThreadSection aSection(&s_critSection);
- if (!m_bOpen)
- return -1;
- CString strSQL;
- if (lpFilters && _tcsicmp(lpFilters, _T("")) != 0)
- strSQL.Format(_T("select count(*) as cot from %s where %s"), lpTblName, lpFilters);
- else
- strSQL.Format(_T("select count(*) as cot from %s"), lpTblName);
- CRecordset tagRecordset(m_pdbInstance);
- tagRecordset.Open(CRecordset::forwardOnly, strSQL);
- tagRecordset.GetFieldValue(_T("cot"), strSQL);
- tagRecordset.Close();
- return _ttoi(strSQL);
- }
- catch (CDBException* e)
- {
- SolveDBError(GetLastError(),e->m_strError);
- e->Delete();
- }
- return -1;
- }
- BOOL CODBCImpl::GetVersionInfo( OUT LPVOID lpVerInfo )
- {
- try{
- AutoThreadSection aSection(&s_critSection);
- if (!m_bOpen) return FALSE;
- TblVersion *pVerInfo = (TblVersion *)(lpVerInfo);
- CTblversion rsSt;
- rsSt.m_pDatabase = m_pdbInstance;
- rsSt.Open();
- INT_PTR nIndex = 0;
- while (!rsSt.IsEOF())
- {
- _stprintf_s(pVerInfo->szVersion, _T("%s"), rsSt.m_version);
- _stprintf_s(pVerInfo->szbakServer1, _T("%s"), rsSt.m_bakserver1);
- _stprintf_s(pVerInfo->szbakServer2, _T("%s"), rsSt.m_bakserver2);
- _stprintf_s(pVerInfo->szbakServer3, _T("%s"), rsSt.m_bakserver3);
- _stprintf_s(pVerInfo->szbakServer4, _T("%s"), rsSt.m_bakserver4);
- _stprintf_s(pVerInfo->szbakServer5, _T("%s"), rsSt.m_bakserver5);
- pVerInfo->bCheck1 = _ttoi(rsSt.m_check1);
- pVerInfo->bCheck2 = _ttoi(rsSt.m_check2);
- pVerInfo->bCheck3 = _ttoi(rsSt.m_check3);
- pVerInfo->bCheck4 = _ttoi(rsSt.m_check4);
- pVerInfo->bCheckbak1 = _ttoi(rsSt.m_bak1);
- pVerInfo->bCheckbak2 = _ttoi(rsSt.m_bak2);
- pVerInfo->bCheckbak3 = _ttoi(rsSt.m_bak3);
- pVerInfo->bCheckbak4 = _ttoi(rsSt.m_bak4);
- pVerInfo->bCheckbak5 = _ttoi(rsSt.m_bak5);
- pVerInfo->bCheckbak6 = _ttoi(rsSt.m_bak6);
- pVerInfo->bCheckbakdel1 = _ttoi(rsSt.m_delcheck1);
- pVerInfo->bCheckbakdel2 = _ttoi(rsSt.m_delcheck2);
- pVerInfo->bCheckbakdel3 = _ttoi(rsSt.m_delcheck3);
- pVerInfo->bCheckbakdel4 = _ttoi(rsSt.m_delcheck4);
- pVerInfo->bSubCheck1 = _ttoi(rsSt.m_bak11);
- pVerInfo->bSubCheck2 = _ttoi(rsSt.m_bak22);
- pVerInfo->bSubCheck3 = _ttoi(rsSt.m_bak33);
- pVerInfo->bSubCheck4 = _ttoi(rsSt.m_bak44);
- pVerInfo->nbakTime = _ttoi(rsSt.m_baktime);
- pVerInfo->nCheckMonth1 = _ttoi(rsSt.m_edit1);
- pVerInfo->nCheckMonth2 = _ttoi(rsSt.m_edit2);
- pVerInfo->nCheckMonth3 = _ttoi(rsSt.m_edit3);
- pVerInfo->nCheckMonth4 = _ttoi(rsSt.m_edit4);
- pVerInfo->nCheckbdMonth1 = _ttoi(rsSt.m_deledit1);
- pVerInfo->nCheckbdMonth2 = _ttoi(rsSt.m_deledit2);
- pVerInfo->nCheckbdMonth3 = _ttoi(rsSt.m_deledit3);
- pVerInfo->nCheckbdMonth4 = _ttoi(rsSt.m_deledit4);
- pVerInfo->bUpLoadCheck1 = _ttoi(rsSt.m_UploadCheck1);
- pVerInfo->bUpLoadCheck2 = _ttoi(rsSt.m_UploadCheck2);
- pVerInfo->bUpLoadCheck3 = _ttoi(rsSt.m_UploadCheck3);
- pVerInfo->bUpLoadCheck4 = _ttoi(rsSt.m_UploadCheck4);
- pVerInfo->strZiptype1 = rsSt.m_zipType1;
- pVerInfo->strZiptype1 = rsSt.m_zipType2;
- pVerInfo->strZiptype1 = rsSt.m_zipType3;
- pVerInfo->strZiptype1 = rsSt.m_zipType4;
- pVerInfo->strUploadRule = rsSt.m_strUpLoadRule;
- nIndex++;
- rsSt.MoveNext();
- }
- rsSt.Close();
- }
- catch (CDBException *e)
- {
- SolveDBError(GetLastError(),e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- BOOL CODBCImpl::GetNetShareInfo( OUT LPVOID lpNetShareInfo )
- {
- try{
- AutoThreadSection aSection(&s_critSection);
- if (!m_bOpen) return FALSE;
- vector<TblNetShareInfo> *pNetShareInfo = (vector<TblNetShareInfo> *)(lpNetShareInfo);
- CTblNetShareInfo rsSt;
- rsSt.m_pDatabase = m_pdbInstance;
- rsSt.Open();
- INT_PTR nIndex = 0;
- while (!rsSt.IsEOF())
- {
- TblNetShareInfo tagNetInfo;
- tagNetInfo.bEnable = rsSt.m_enable;
- _stprintf_s(tagNetInfo.szBranchId, _T("%s"), rsSt.m_branchid );
- _stprintf_s(tagNetInfo.szShareDirectory, _T("%s"), rsSt.m_sharepath );
- tagNetInfo.byMinCapacity = rsSt.m_mincapacity;
- tagNetInfo.byMaxCapacity = rsSt.m_maxcapacity;
- tagNetInfo.byImgType = rsSt.m_phototype;
- tagNetInfo.byPriority = rsSt.m_priority;
- pNetShareInfo->push_back(tagNetInfo);
- nIndex++;
- rsSt.MoveNext();
- }
- rsSt.Close();
- }
- catch (CDBException *e)
- {
- SolveDBError(GetLastError(),e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
|