#include "StdAfx.h" #include "ODBCConnect.h" #include 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 *pNetShareInfo = (vector *)(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 *pOrderInfo = (CArray *)(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& 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 *pOrderInfo = (vector *)(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; }