123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595 |
- #include "StdAfx.h"
- #include "ODBCConnect.h"
- #include <strsafe.h>
- CODBCConnect::CODBCConnect(IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName, BOOL &bResult)
- {
- m_bOpen = FALSE;
- m_busing = FALSE;
- m_pdbInstance = NULL;
- memset(m_szConnectString, 0, MAX_PATH*sizeof(TCHAR));
- bResult = Open(lpDBSource, dwDBPort, lpDBAccount, lpPassWord, lpDBName);
- }
- CODBCConnect::~CODBCConnect(void)
- {
- Close();
- }
- void CODBCConnect::SolveDBError( IN CONST DWORD &dwError, IN LPCTSTR lpErrorString)
- {
- switch(dwError)
- {
- case SQL_ERROR:
- case ERROR_PIPE_NOT_CONNECTED:
- case WSAECONNRESET:
- case WSAECONNABORTED:
- {
- //m_bEffectConnect = FALSE;
- printf(_T("\t数据库无效连接[%d]:%d, %s\n\n"), m_nObjId, dwError, lpErrorString);
- LOG4C_NO_FILENUM((LOG_NOTICE,"\t数据库无效连接[%d]:%d, %s", m_nObjId, dwError, lpErrorString));
- Close();
- if ( m_pdbInstance == NULL )
- {
- m_pdbInstance = new CDatabase;
- try
- {
- m_pdbInstance->OpenEx(m_szConnectString, CDatabase::noOdbcDialog);
- m_bOpen = TRUE;
- }
- catch (...)
- {
- delete m_pdbInstance;
- m_pdbInstance = NULL;
- }
- }
- }
- break;
- default:
- // 其他错误,输出日志;
- printf(_T("\t数据库语法错误[%d]:%d, %s\n\n"), m_nObjId,dwError, lpErrorString);
- //LOG4C_NO_FILENUM((LOG_NOTICE,"数据库语法错误[%d]:%d, %s", m_nObjId,dwError, lpErrorString));
- break;
- }
- }
- INT CODBCConnect::Open( IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName )
- {
- if (m_pdbInstance == NULL)
- {
- m_pdbInstance = new CDatabase;
- TCHAR szConnString[MAX_PATH] = {0};
- if (dwDBPort != 0)
- _stprintf_s(szConnString, _T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s"),
- lpDBSource, dwDBPort, lpDBName, lpDBAccount, lpPassWord);
- else
- _stprintf_s(szConnString, _T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s"),
- lpDBSource, lpDBName, lpDBAccount, lpPassWord);
- try
- {
- m_pdbInstance->OpenEx(szConnString, CDatabase::noOdbcDialog);
- _stprintf_s(m_szConnectString, _T("%s"), szConnString);
- }
- catch (.../*CDBException* e*/)
- {
- delete m_pdbInstance;
- m_pdbInstance = NULL;
- //printf("%s\n",e->m_strError);
- //e->ReportError();
- //e->Delete();
- return FALSE;
- }
- m_bOpen = TRUE;
- //m_bEffectConnect = TRUE;
- }
- return m_bOpen;
- }
- void CODBCConnect::Close()
- {
- if ( m_bOpen )
- {
- if ( m_pdbInstance )
- {
- delete m_pdbInstance;
- m_pdbInstance = NULL;
- m_bOpen = FALSE;
- //m_bEffectConnect = FALSE;
- }
- }
- }
- BOOL CODBCConnect::GetSelectby(IN LPCTSTR lpTblName, IN LPCTSTR lpColumn, IN LPCTSTR lpFilters, OUT LPTSTR lpResult, IN CONST INT& nBufLen )
- {
- try
- {
- if (!m_bOpen)
- return -1;
- CString strSQL;
- if (lpFilters && _tcsicmp(lpFilters, _T("")) != 0)
- strSQL.Format(_T("select %s from %s where %s"), lpColumn, lpTblName, lpFilters);
- else
- strSQL.Format(_T("select %s from %s"), lpColumn, lpTblName);
- CRecordset tagRecordset(m_pdbInstance);
- tagRecordset.Open(CRecordset::forwardOnly, strSQL);
- if(!tagRecordset.IsEOF())
- {
- tagRecordset.GetFieldValue(lpColumn, strSQL);
- _stprintf_s(lpResult, nBufLen, _T("%s"), (LPCTSTR)strSQL);
- }
- tagRecordset.Close();
- }
- catch(CDBException* e)
- {
- printf(_T("CODBCConnect::GetSelectby!\n"));
- printf("%s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- BOOL CODBCConnect::ExecuteSQL( IN LPCTSTR lpSQL )
- {
- try
- {
- if ( !m_bOpen || lpSQL == NULL )
- return FALSE;
- m_pdbInstance->ExecuteSQL(lpSQL);
- }
- catch (CDBException* e)
- {
- //printf(_T("CODBCConnect::ExecuteSQL : %s!\n"), lpSQL);
- //printf("%s\n",e->m_strError);
- CString str = lpSQL;
- str.Replace(_T("\n"), _T(" "));
- str.Replace(_T("\r"), _T(" "));
- //LOG4C_NO_FILENUM((LOG_NOTICE, "SQL出错[%s]:%s", e->m_strError, str ));
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- INT CODBCConnect::GetTblRecordCount(IN LPCTSTR lpTblName, IN LPCTSTR lpFilters)
- {
- try
- {
- 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)
- {
- printf(_T("CODBCConnect::GetTblRecordCount!\n"));
- printf("%s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- }
- return -1;
- }
- BOOL CODBCConnect::GetVersionInfo( OUT LPVOID lpVerInfo )
- {
- try{
- 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);
- nIndex++;
- rsSt.MoveNext();
- }
- rsSt.Close();
- }
- catch (CDBException *e)
- {
- printf(_T("CODBCConnect::GetVersionInfo!\n"));
- printf("%s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- BOOL CODBCConnect::GetNetShareInfo( OUT LPVOID lpNetShareInfo )
- {
- try{
- 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)
- {
- printf(_T("CODBCConnect::GetNetShareInfo!\n"));
- printf("%s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- BOOL CODBCConnect::GetOrderInfo( OUT LPVOID lpOrderInfo )
- {
- try{
- if (!m_bOpen) return FALSE;
- CArray<CStringArray,CStringArray> *pOrderInfo = (CArray<CStringArray,CStringArray> *)(lpOrderInfo);
- //CString strFilter = _T("id like('201411%')");
- //INT nCount = GetTblRecordCount(_T("dindan"), strFilter);
- INT nCount = GetTblRecordCount(_T("dindan"), NULL);
- if ( nCount == 0 )
- {
- OutputDebugString(_T("\n无记录\n"));
- return FALSE;
- }
- pOrderInfo->SetSize(nCount,1);
- CTbldindan rsSt;
- rsSt.m_pDatabase = m_pdbInstance;
- //rsSt.m_strFilter = strFilter;
- rsSt.Open();
- INT_PTR nIndex = 0;
- while (!rsSt.IsEOF())
- {
- pOrderInfo->ElementAt(nIndex).Add( rsSt.m_id);
- pOrderInfo->ElementAt(nIndex).Add( rsSt.m_name1);
- pOrderInfo->ElementAt(nIndex).Add( rsSt.m_name2);
- pOrderInfo->ElementAt(nIndex).Add( rsSt.m_taoxiid);
- pOrderInfo->ElementAt(nIndex).Add( rsSt.m_taoxiname);
- pOrderInfo->ElementAt(nIndex).Add( rsSt.m_taoxijiage);
-
- nIndex++;
- rsSt.MoveNext();
- if ( pOrderInfo->GetSize() <= nIndex )
- {
- break;
- }
- }
- rsSt.Close();
- }
- catch (CDBException *e)
- {
- printf(_T("CODBCConnect::GetOrderInfo!\n"));
- printf("%s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- BOOL CODBCConnect::GetunauthInfo( IN LPCTSTR lpSQLFilters, OUT LPTSTR lpUnauthInfo )
- {
- try{
- if (!m_bOpen) return FALSE;
- if ( lpSQLFilters == NULL || lpUnauthInfo == NULL )
- return FALSE;
- CRecordset rsSt(m_pdbInstance);
- CString strSQL;
- strSQL.Format(_T("select [execute] from unauth where name = '%s'"), lpSQLFilters);
- rsSt.Open(CRecordset::forwardOnly, strSQL);
- if (!rsSt.IsEOF())
- {
- rsSt.GetFieldValue(_T("execute"), strSQL);
- //_stprintf_s(lpUnauthInfo, 1024, _T("%s"), strSQL);
- StringCchPrintf(lpUnauthInfo, strSQL.GetLength() + 1, _T("%s"),strSQL);
- }
- rsSt.Close();
- }
- catch (CDBException *e)
- {
- printf(_T("CODBCConnect::GetOrderInfo!\n"));
- printf("%s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- BOOL CODBCConnect::GetunauthInfo( IN LPCTSTR lpSQLFilters, OUT TString &strUnauthInfo )
- {
- try{
- if (!m_bOpen) return FALSE;
- if ( lpSQLFilters == NULL )
- return FALSE;
- CRecordset rsSt(m_pdbInstance);
- CString strSQL;
- strSQL.Format(_T("select [execute] from unauth where name = '%s'"), lpSQLFilters);
- rsSt.Open(CRecordset::forwardOnly, strSQL);
- if (!rsSt.IsEOF())
- {
- rsSt.GetFieldValue(_T("execute"), strSQL);
- //_stprintf_s(lpUnauthInfo, 1024, _T("%s"), strSQL);
- //StringCchPrintf(lpUnauthInfo, strSQL.GetLength() + 1, _T("%s"),strSQL);
- //strUnauthInfo = strSQL.GetString();
- strUnauthInfo.append(strSQL);
- }
- rsSt.Close();
- }
- catch (CDBException *e)
- {
- printf("CODBCConnect::GetunauthInfo %s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- INT CODBCConnect::GetClientEnterpriseName( IN LPCTSTR lpSQLFilters, OUT LPVOID lpClientIPInfo )
- {
- try{
- if (!m_bOpen) return -1;
- INT nCount = 0;
- TblClientip1 *pClientIPInfo = (TblClientip1 *)(lpClientIPInfo);
- CTblclientip rsSt;
- rsSt.m_pDatabase = m_pdbInstance;
- rsSt.m_strFilter = lpSQLFilters;
- rsSt.Open();
- INT_PTR nIndex = 0;
- if (!rsSt.IsEOF())
- {
- #if 0
- _stprintf_s(pClientIPInfo->szBranchname, _T("%s"), rsSt.m_branchname);
- _stprintf_s(pClientIPInfo->szRegcode2, _T("%s"), rsSt.m_regcode2);
- #else
- pClientIPInfo->szBranchname = rsSt.m_branchname;
- pClientIPInfo->szRegcode2 = rsSt.m_regcode2;
- #endif
- nCount = 1;
- }
- rsSt.Close();
- return nCount;
- }
- catch (CDBException *e)
- {
- printf("CODBCConnect::GetClientEnterpriseName %s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return -1;
- }
- }
- INT CODBCConnect::GetEnterprisInfo(IN LPCTSTR lpEnterpriseName, OUT CArray<CStringArray, CStringArray>& AryEnterpriseInfo)
- {
- try{
- if (!m_bOpen || lpEnterpriseName == NULL || lpEnterpriseName[0] == _T('\0') ) return -1;
- INT nCount = 0;
- CString strSQL = _T("");
- strSQL.Format(_T("select count(*) as cot from clientip where [enterprisename]= '%s'"), lpEnterpriseName);
- CRecordset tagRecordset(m_pdbInstance);
- tagRecordset.Open(CRecordset::forwardOnly, strSQL);
- tagRecordset.GetFieldValue(_T("cot"), strSQL);
-
- nCount = _ttoi(strSQL);
- if ( nCount == 0 ) return 0;
- CTblclientip rsSt;
- rsSt.m_pDatabase = m_pdbInstance;
- strSQL.Format(_T("[enterprisename] = '%s'"),lpEnterpriseName);
- rsSt.m_strFilter = strSQL;
- rsSt.Open();
- INT_PTR nIndex = 0;
- AryEnterpriseInfo.SetSize(nCount,1);
- while (!rsSt.IsEOF())
- {
- AryEnterpriseInfo.ElementAt(nIndex).RemoveAll();
- AryEnterpriseInfo.ElementAt(nIndex).Add(rsSt.m_name);
- AryEnterpriseInfo.ElementAt(nIndex).Add(rsSt.m_branchname);
- AryEnterpriseInfo.ElementAt(nIndex).Add(rsSt.m_ip);
- AryEnterpriseInfo.ElementAt(nIndex).Add(rsSt.m_bmain);
- AryEnterpriseInfo.ElementAt(nIndex).Add(rsSt.m_enterprisename);
- strSQL = _T(",") + rsSt.m_rights + _T(",");
- AryEnterpriseInfo.ElementAt(nIndex).Add(strSQL);
- AryEnterpriseInfo.ElementAt(nIndex).Add(rsSt.m_name2);
- rsSt.MoveNext();
- nIndex++;
- if ( nIndex >= AryEnterpriseInfo.GetSize() )
- break;
- }
- rsSt.Close();
- //AryEnterpriseInfo.SetSize(nIndex,1);
- return nCount;
- }
- catch (CDBException *e)
- {
- printf("CODBCConnect::GetEnterprisInfo %s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return -1;
- }
- }
- BOOL CODBCConnect::GetDBCFileInfo(IN LPCTSTR lpSQL, OUT TString& strResult )
- {
- try{
- if (!m_bOpen || lpSQL == NULL || lpSQL[0] == _T('\0') ) return FALSE;
- INT i;
- INT nColumns;
- CString temp;
- CODBCFieldInfo fieldinfo;
- CRecordset rsSet(m_pdbInstance);
- rsSet.Open(CRecordset::forwardOnly, lpSQL);
- strResult = _T("");
- if( !rsSet.IsEOF() )
- {
- nColumns = rsSet.GetODBCFieldCount();
- for( i = 0; i < nColumns-1; i++)
- {
- rsSet.GetFieldValue(i, temp);
- strResult.append(_T("'"));
- strResult.append(temp);
- strResult.append(_T("',"));
- }
- rsSet.GetFieldValue(i, temp);
- strResult.append(_T("'"));
- strResult.append(temp);
- strResult.append(_T("'\r\n"));
- rsSet.MoveNext();
- }
- rsSet.Close();
- }
- catch(CDBException *e)
- {
- printf("CODBCConnect::GetEnterprisInfo %s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
- BOOL CODBCConnect::GetTookOrderInfo( OUT LPVOID lpTookOrderInfo )
- {
- try{
- if (!m_bOpen) return FALSE;
- vector<TblTookOrderInfo> *pOrderInfo = (vector<TblTookOrderInfo> *)(lpTookOrderInfo);
- CTblTookOrder rsSt;
- rsSt.m_pDatabase = m_pdbInstance;
- rsSt.m_strFilter = _T("status3='OK' and time5 is not null and time5<>''");
- rsSt.Open();
- while (!rsSt.IsEOF())
- {
- TblTookOrderInfo tagToolOrderInfo;
- tagToolOrderInfo.strOrder = rsSt.m_strOrder;
- tagToolOrderInfo.strTookDate = rsSt.m_strTookDate;
- pOrderInfo->push_back(tagToolOrderInfo);
- rsSt.MoveNext();
- }
- rsSt.Close();
- }
- catch (CDBException *e)
- {
- printf("CODBCConnect::GetTookOrderInfo %s\n",e->m_strError);
- SolveDBError(e->m_nRetCode,e->m_strError);
- e->Delete();
- return FALSE;
- }
- return TRUE;
- }
|