#include "StdAfx.h" #include "AdoImpl.h" AdoImpl::AdoImpl(void) { m_pADODatabase = NULL; memset(m_szConnectString,0,1024); InitializeCriticalSection(&m_csAdo); } AdoImpl::~AdoImpl(void) { DeleteCriticalSection(&m_csAdo); } void AdoImpl::SetConnectString(IN const int &nType,IN const STAdoDatabaseInfo &tagAodDatabaseInfo) { switch (nType) { case ADO_ACCESS97: sprintf(m_szConnectString, "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s", tagAodDatabaseInfo.szDatabaseFile); break; case ADO_ACCESS2000: sprintf(m_szConnectString, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s", tagAodDatabaseInfo.szDatabaseFile); break; case ADO_ACCESS2007: sprintf(m_szConnectString, "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s", tagAodDatabaseInfo.szDatabaseFile); break; case ADO_SQLSERVER: { if ( !_stricmp(tagAodDatabaseInfo.szDatabaseTCPPort,"0")) { //sprintf(m_szConnectString, "Provider=sqloledb.1;Persist Security Info=false;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s; ", sprintf(m_szConnectString, "Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s; ", tagAodDatabaseInfo.szDataSource, // IP地址或服务名称; tagAodDatabaseInfo.szDatabaseName, tagAodDatabaseInfo.szDatabaseAccount, tagAodDatabaseInfo.szDatabasePassword); } else { //sprintf(m_szConnectString, "Provider=sqloledb.1;Persist Security Info=false;Data Source=%s,%s;Initial Catalog=%s;User Id=%s;Password=%s; ", sprintf(m_szConnectString, "Provider=sqloledb;Data Source=%s,%s;Initial Catalog=%s;User Id=%s;Password=%s; ", tagAodDatabaseInfo.szDataSource, // IP地址或服务名称; tagAodDatabaseInfo.szDatabaseTCPPort, tagAodDatabaseInfo.szDatabaseName, tagAodDatabaseInfo.szDatabaseAccount, tagAodDatabaseInfo.szDatabasePassword); } } break; case ADO_PGSQL: { sprintf(m_szConnectString, "DRIVER={PostgreSQL ODBC Driver(UNICODE)}; SERVER=%s; port=%s; DATABASE=%s; UID=%s; PWD=%s;", tagAodDatabaseInfo.szDataSource, // IP地址或服务名称; tagAodDatabaseInfo.szDatabaseTCPPort, tagAodDatabaseInfo.szDatabaseName, tagAodDatabaseInfo.szDatabaseAccount, tagAodDatabaseInfo.szDatabasePassword); } break; default: break; } } bool AdoImpl::opendatabase(IN const TCHAR *pConnectString) { bool bResult = false; if( NULL == m_pADODatabase ) { m_pADODatabase = new CADODatabase(); if( m_pADODatabase ) { if( pConnectString == NULL ) { m_pADODatabase->SetConnectionString(m_szConnectString); } else { m_pADODatabase->SetConnectionString(pConnectString); strcpy(m_szConnectString, pConnectString); } if( TRUE == m_pADODatabase->Open() ) { //LOG4C((LOG_NOTICE, "Database Connetion Success!")); bResult = true; } else { if( m_pADODatabase->IsOpen() ) { m_pADODatabase->Close(); } delete m_pADODatabase; m_pADODatabase = NULL; //LOG4C((LOG_NOTICE, "Database Connetion Lost!")); } } } return bResult; } void AdoImpl::closedatabase() { if( NULL != m_pADODatabase ) { if( m_pADODatabase->IsOpen() ) { m_pADODatabase->Close(); } if( m_pADODatabase ) delete m_pADODatabase; m_pADODatabase = NULL; } } int AdoImpl::Execute(TCHAR *pSQL) { INT iRetCode = 0; if( NULL == m_pADODatabase ) { //LOG4C((LOG_NOTICE, "NULL == m_pADODatabase" )); return -1; } try { EnterCriticalSection(&m_csAdo); if ( m_pADODatabase->IsOpen() ) { iRetCode = m_pADODatabase->Execute(pSQL); LeaveCriticalSection(&m_csAdo); } else { LeaveCriticalSection(&m_csAdo); //LOG4C((LOG_NOTICE, "m_pADODatabase->IsOpen() = false" )); return -1; } } catch (_com_error &e) { //LOG4C( ( LOG_ERROR, "Execute SQL Script Error, Script:%s, ErrorMsg:%s", pSql, e.ErrorMessage() ) ); }// end catch (_com_error &e) return iRetCode; } void AdoImpl::DeleteADORecordSet(CADORecordset* pRSet) { CloseADORecordSet(pRSet); if( pRSet ) { delete pRSet; pRSet = NULL; } } bool AdoImpl::OpenADORecordSet(CADORecordset* pRSet, const TCHAR *pSQL) { int iRetCode; bool bResult = true; if( NULL == pRSet ) return false; try { iRetCode = pRSet->Open(pSQL, CADORecordset::openQuery); if (iRetCode == 0) { DeleteADORecordSet(pRSet); bResult = false; } } catch (_com_error &e) { //LOG4C( ( LOG_ERROR, "Execute SQL Script Error, Script:%s, ErrorMsg:%s", pSql, e.ErrorMessage() ) ); DeleteADORecordSet(pRSet); bResult = false; }// end catch (_com_error &e) return bResult; } void AdoImpl::CloseADORecordSet(CADORecordset* pRSet) { if( NULL != pRSet ) { if( pRSet->IsOpen() ) { pRSet->Close(); } } } bool AdoImpl::GetADODateBaseStatus() { if( NULL == m_pADODatabase || !m_pADODatabase->IsOpen()) return false; return true; } DWORD AdoImpl::GetTableRecordCount(IN const TCHAR *pTableName) { if ( pTableName == NULL) { return -1; } TCHAR szSQL[1024] = _T(""); sprintf(szSQL,"select count(*) as cot from %s",pTableName); DWORD nRecordCount = 0; _variant_t vtFieldValue; bool bResult = false; EnterCriticalSection( &m_csAdo ); bResult = GetADODateBaseStatus(); if( false == bResult ) { LeaveCriticalSection( &m_csAdo ); return -1; } CADORecordset* pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection( &m_csAdo ); if( NULL == pRSet ) { //LOG4C((LOG_NOTICE, "GetFieldValueList1 pRSet == NULL")); return -1; } bResult = OpenADORecordSet(pRSet, szSQL); if( false == bResult ) { //LOG4C((LOG_NOTICE, "GetFieldValueList1 OpenADORecordSet <%s>", pSql)); DeleteADORecordSet(pRSet); return -1; } if( !pRSet->IsFieldNull("cot") ) { pRSet->GetFieldValue("cot", nRecordCount); } else { nRecordCount = -1; }// end if( !pRSet->IsFieldNull(0) ) DeleteADORecordSet(pRSet); return nRecordCount; } int AdoImpl::GetClientServiceViewData(__in const TCHAR *pSQL,__out CArray& strArray,__in const TCHAR *pfilter) { int nFieldCount = 0; int nRecordCount = 0; _variant_t vtFieldValue; bool bResult = false; EnterCriticalSection( &m_csAdo ); bResult = GetADODateBaseStatus(); if( false == bResult ) { LeaveCriticalSection( &m_csAdo ); return -1; } CADORecordset* pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection( &m_csAdo ); if( NULL == pRSet ) { return -1; } TCHAR szSQL[1024] = _T(""); if(pfilter && (strcmp(pfilter,"") != 0)) sprintf(szSQL,"%s where %s",pSQL,pfilter); else sprintf(szSQL,"%s",pSQL); bResult = OpenADORecordSet(pRSet, szSQL); if( false == bResult ) { DeleteADORecordSet(pRSet); return -1; } nRecordCount = pRSet->GetRecordCount(); nFieldCount = pRSet->GetFieldCount(); strArray.SetSize(nRecordCount,1); for( int i = 0; i < nRecordCount; i++ ) { if( !pRSet->IsFieldNull("dindanid") ) { pRSet->GetFieldValue("dindanid", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("name1") ) { pRSet->GetFieldValue("name1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("name2") ) { pRSet->GetFieldValue("name2", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("phone1") ) { pRSet->GetFieldValue("phone1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("addr1") ) { pRSet->GetFieldValue("addr1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("qq1") ) { pRSet->GetFieldValue("qq1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("txtype") ) { pRSet->GetFieldValue("txtype", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("ren") ) { pRSet->GetFieldValue("ren", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("checkcontent") ) { pRSet->GetFieldValue("checkcontent", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("clerk") ) { pRSet->GetFieldValue("clerk", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("useqq") ) { pRSet->GetFieldValue("useqq", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("date") ) { pRSet->GetFieldValue("date", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("question") ) { pRSet->GetFieldValue("question", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("solution") ) { pRSet->GetFieldValue("solution", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("result") ) { pRSet->GetFieldValue("result", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("clientqq") ) { pRSet->GetFieldValue("clientqq", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("contact") ) { pRSet->GetFieldValue("contact", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("time") ) { pRSet->GetFieldValue("time", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("from") ) { pRSet->GetFieldValue("from", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("pinyin1") ) { pRSet->GetFieldValue("pinyin1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("pinyin2") ) { pRSet->GetFieldValue("pinyin2", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } pRSet->MoveNext(); }// end for( int i = 0; i < nRecordCount; i++ ) DeleteADORecordSet(pRSet); return nRecordCount; } int AdoImpl::GetClientServiceViewDataEx(__in const TCHAR *pSQL,__out CArray& strArray,__in const TCHAR *pfilter) { int nFieldCount = 0; int nRecordCount = 0; _variant_t vtFieldValue; bool bResult = false; EnterCriticalSection( &m_csAdo ); bResult = GetADODateBaseStatus(); if( false == bResult ) { LeaveCriticalSection( &m_csAdo ); return -1; } CADORecordset* pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection( &m_csAdo ); if( NULL == pRSet ) { return -1; } TCHAR szSQL[1024] = _T(""); if(pfilter && (strcmp(pfilter,"") != 0)) sprintf(szSQL,"%s where %s",pSQL,pfilter); else sprintf(szSQL,"%s",pSQL); bResult = OpenADORecordSet(pRSet, szSQL); if( false == bResult ) { DeleteADORecordSet(pRSet); return -1; } nRecordCount = pRSet->GetRecordCount(); nFieldCount = pRSet->GetFieldCount(); strArray.SetSize(nRecordCount,1); for( int i = 0; i < nRecordCount; i++ ) { if( !pRSet->IsFieldNull("dindanid") ) { pRSet->GetFieldValue("dindanid", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("name1") ) { pRSet->GetFieldValue("name1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("name2") ) { pRSet->GetFieldValue("name2", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("phone1") ) { pRSet->GetFieldValue("phone1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("addr1") ) { pRSet->GetFieldValue("addr1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("qq1") ) { pRSet->GetFieldValue("qq1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("txtype") ) { pRSet->GetFieldValue("txtype", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("ren") ) { pRSet->GetFieldValue("ren", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("checkcontent") ) { pRSet->GetFieldValue("checkcontent", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("clerk") ) { pRSet->GetFieldValue("clerk", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("useqq") ) { pRSet->GetFieldValue("useqq", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("date") ) { pRSet->GetFieldValue("date", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("from") ) { pRSet->GetFieldValue("from", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("clientqq") ) { pRSet->GetFieldValue("clientqq", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("contact") ) { pRSet->GetFieldValue("contact", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("time") ) { pRSet->GetFieldValue("time", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("question") ) { pRSet->GetFieldValue("question", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("solution") ) { pRSet->GetFieldValue("solution", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("result") ) { pRSet->GetFieldValue("result", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("autoid") ) { pRSet->GetFieldValue("autoid", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("pinyin1") ) { pRSet->GetFieldValue("pinyin1", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } if( !pRSet->IsFieldNull("pinyin2") ) { pRSet->GetFieldValue("pinyin2", vtFieldValue); string strFieldValue = string((char*)(_bstr_t)vtFieldValue); strArray.ElementAt(i).Add(strFieldValue.c_str()); } else { strArray.ElementAt(i).Add(""); } pRSet->MoveNext(); }// end for( int i = 0; i < nRecordCount; i++ ) DeleteADORecordSet(pRSet); return nRecordCount; }