#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 LPCTSTR lpDataSource, IN LPCTSTR lpDatabaseTCPPort, IN LPCTSTR lpDatabaseAccount, IN LPCTSTR lpDatabasePassWord, IN LPCTSTR lpDatabaseName, IN LPCTSTR lpDatabaseFile) { switch (nType) { case ADO_ACCESS97: _stprintf_s(m_szConnectString, _T("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=%s"), lpDatabaseFile); break; case ADO_ACCESS2000: _stprintf_s(m_szConnectString, _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"), lpDatabaseFile); break; case ADO_ACCESS2007: _stprintf_s(m_szConnectString, _T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=%s"), lpDatabaseFile); break; case ADO_SQLSERVER: { if ( !_tcsicmp(lpDatabaseTCPPort, _T("0"))) { //sprintf(m_szConnectString, "Provider=sqloledb.1;Persist Security Info=false;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s; ", _stprintf_s(m_szConnectString, _T("Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s; "), lpDataSource, // IP��ַ���������; lpDatabaseName, lpDatabaseAccount, lpDatabasePassWord); } else { //sprintf(m_szConnectString, "Provider=sqloledb.1;Persist Security Info=false;Data Source=%s,%s;Initial Catalog=%s;User Id=%s;Password=%s; ", _stprintf_s(m_szConnectString, _T("Provider=sqloledb;Data Source=%s,%s;Initial Catalog=%s;User Id=%s;Password=%s; "), lpDataSource, // IP��ַ���������; lpDatabaseTCPPort, lpDatabaseName, lpDatabaseAccount, lpDatabasePassWord); } } break; case ADO_PGSQL: { _stprintf_s(m_szConnectString, _T("DRIVER={PostgreSQL ODBC Driver(UNICODE)}; SERVER=%s; port=%s; DATABASE=%s; UID=%s; PWD=%s;"), lpDataSource, // IP��ַ���������; lpDatabaseTCPPort, lpDatabaseName, lpDatabaseAccount, lpDatabasePassWord); } break; default: break; } } BOOL AdoImpl::IsOpen() { if ( m_pADODatabase == NULL) return FALSE; return m_pADODatabase->IsOpen(); } BOOL AdoImpl::Opendatabase(IN LPCTSTR lpConnectString /* = NULL */) { BOOL bResult = FALSE; if( NULL == m_pADODatabase ) { m_pADODatabase = new CADODatabase(); if( m_pADODatabase ) { if( lpConnectString == NULL ) { m_pADODatabase->SetConnectionString(m_szConnectString); } else { m_pADODatabase->SetConnectionString(lpConnectString); _tcscpy_s(m_szConnectString, lpConnectString); } if( TRUE == m_pADODatabase->Open() ) { bResult = TRUE; } else { if( m_pADODatabase->IsOpen() ) { m_pADODatabase->Close(); } delete m_pADODatabase; m_pADODatabase = NULL; } } } 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(IN LPCTSTR lpSQL) { INT nRetCode = 0; if( NULL == m_pADODatabase ) { return -1; } EnterCriticalSection(&m_csAdo); if ( m_pADODatabase->IsOpen() ) { nRetCode = m_pADODatabase->Execute(lpSQL); LeaveCriticalSection(&m_csAdo); } else { LeaveCriticalSection(&m_csAdo); return -1; } return nRetCode; } void AdoImpl::DeleteADORecordSet(IN CADORecordset* pRSet) { CloseADORecordSet(pRSet); if( pRSet ) { delete pRSet; pRSet = NULL; } } BOOL AdoImpl::OpenADORecordSet(IN CADORecordset *pRSet, IN LPCTSTR lpSQL, IN const int& nCursorLocation) { BOOL bResult = TRUE; if( NULL == pRSet ) return FALSE; if ( !pRSet->Open(lpSQL, nCursorLocation)) { DeleteADORecordSet(pRSet); bResult = FALSE; } return bResult; } void AdoImpl::CloseADORecordSet(IN 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 LPCTSTR lpTableName, IN LPCTSTR lpFilters) { if ( lpTableName == NULL) return -1; TCHAR szSQL[1024] = _T(""); if(lpFilters == NULL || _tcscmp(lpFilters,_T("")) == 0) _stprintf_s(szSQL,_T("select count(*) as cot from %s"),lpTableName); else _stprintf_s(szSQL,_T("select count(*) as cot from %s where %s"),lpTableName,lpFilters); DWORD nRecordCount = 0; _variant_t vtFieldValue; BOOL bResult = FALSE; //AutoThreadSection aSection(&s_critSection); EnterCriticalSection(&m_csAdo); bResult = GetADODateBaseStatus(); if( FALSE == bResult ) { LeaveCriticalSection(&m_csAdo); return -1; } CADORecordset* pRSet = new CADORecordset(m_pADODatabase); if( NULL == pRSet ) { LeaveCriticalSection(&m_csAdo); return -1; } bResult = OpenADORecordSet(pRSet, szSQL); if( FALSE == bResult ) { LeaveCriticalSection(&m_csAdo); return -1; } if( !pRSet->IsFieldNull(_T("cot")) ) { pRSet->GetFieldValue(_T("cot"), nRecordCount); } else { nRecordCount = -1; }// end if( !pRSet->IsFieldNull(0) ) DeleteADORecordSet(pRSet); LeaveCriticalSection(&m_csAdo); return nRecordCount; } /************************************************************************/ /* ������GetFieldValueList[4/12/2016 IT]; /* ��������ȡָ������ѯ�ֶε�������¼��; /* ������; /* [IN] lpTableName��Ҫ��ѯ�ı�; /* [IN] lpFields��Ҫ��ѯ���ֶ�; /* [IN] lpFilters����ѯ������; /* [IN] dwCallBackType���ص���������; /* [IN] lpCallBack���ص�����ָ��; /* [INOUT] lpParamter�����ݸ��ص������IJ���; /* ���أ��ɹ���ѯ���ؼ�¼��, ��������-1; /* ע�⣺��ʹ��select count(*) as cot from table����ȡ��¼��; /* ʾ����; /* /* �ģ�; /* ���ڣ�; /* ���ݣ�; /************************************************************************/ int AdoImpl::GetFieldValueList(IN LPCTSTR lpTableName, IN LPCTSTR lpFields, IN LPCTSTR lpFilters, IN const DWORD &dwCallBackType, IN LPVOID lpCallBack, IN OUT LPVOID lpParamter) { if ( lpCallBack == NULL || lpParamter == NULL ) return -1; if ( lpTableName == NULL || lpTableName[0] == _T('\0') || lpFields == NULL || lpFields[0] == _T('\0')) return -1; int nRecordCount = 0; BOOL bResult = FALSE; TCHAR szSQL[2048] = _T(""); // ���ȿ��ܻ��,_stprintf_s�������SQL��䲻��ȷ; 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; if ( lpFilters && lpFilters[0] != _T('\0') ) _stprintf_s(szSQL, _T("select %s from %s where %s"), lpFields, lpTableName, lpFilters); else _stprintf_s(szSQL, _T("select %s from %s"), lpFields, lpTableName); bResult = OpenADORecordSet(pRSet, szSQL); if( FALSE == bResult ) { return -1; } // �ûص������������ص����ݼ����; nRecordCount = ((RecordsetCallback)lpCallBack)(dwCallBackType, lpParamter, 0, pRSet); DeleteADORecordSet(pRSet); return nRecordCount; } /************************************************************************/ /* ������GetFieldValueList[4/12/2016 IT]; /* ��������ȡָ������ѯ�ֶε�������¼��; /* ������; /* [IN] lpTableName��Ҫ��ѯ�ı�; /* [IN] lpFields��Ҫ��ѯ���ֶ�; /* [IN] lpFilters����ѯ������; /* [IN] dwCallBackType���ص���������; /* [IN] lpCallBack���ص�����ָ��; /* [INOUT] lpParamter�����ݸ��ص������IJ���; /* ���أ��ɹ���ѯ���ؼ�¼��, ��������-1; /* ע�⣺; /* ʾ����; /* /* �ģ�; /* ���ڣ�; /* ���ݣ�; /************************************************************************/ int AdoImpl::GetFieldValueListEx(IN LPCTSTR lpTableName, IN LPCTSTR lpFields, IN LPCTSTR lpFilters, IN const DWORD &dwCallBackType, IN LPVOID lpCallBack, IN OUT LPVOID lpParamter) { if ( lpCallBack == NULL || lpParamter == NULL ) return -1; if ( lpTableName == NULL || lpTableName[0] == _T('\0') || lpFields == NULL || lpFields[0] == _T('\0')) return -1; int nRecordCount = 0; BOOL bResult = FALSE; TCHAR szSQL[2048] = _T(""); // ���ȿ��ܻ��,_stprintf_s�������SQL��䲻��ȷ; if ( lpFilters && lpFilters[0] != _T('\0') ) { _stprintf_s(szSQL, _T("select count(*) as cot from %s where %s"), lpTableName, lpFilters); } else { _stprintf_s(szSQL, _T("select count(*) as cot from %s"), lpTableName); } 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; bResult = OpenADORecordSet(pRSet, szSQL); if( FALSE == bResult ){ return -1; } if( !pRSet->IsFieldNull(_T("cot")) ) { pRSet->GetFieldValue(_T("cot"), nRecordCount); } else { nRecordCount = -1; // û�м�¼��; DeleteADORecordSet(pRSet); return -1; } DeleteADORecordSet(pRSet); // ��ȡ��ѯ��¼��; pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection( &m_csAdo ); if( NULL == pRSet ) return -1; if ( lpFilters && lpFilters[0] != _T('\0') ) _stprintf_s(szSQL, _T("select %s from %s where %s"), lpFields, lpTableName, lpFilters); else _stprintf_s(szSQL, _T("select %s from %s"), lpFields, lpTableName); bResult = OpenADORecordSet(pRSet, szSQL); if( FALSE == bResult ) { return -1; } // �ûص������������ص����ݼ����; nRecordCount = ((RecordsetCallback)lpCallBack)(dwCallBackType, lpParamter, nRecordCount, pRSet); DeleteADORecordSet(pRSet); return nRecordCount; } BOOL AdoImpl::AppenChunkFromFile(IN LPCTSTR lpTableName, IN LPCTSTR lpFieldName, IN LPCTSTR lpFileName) { if ( lpTableName == NULL || lpTableName[0] == _T('\0') || lpFieldName == NULL || lpFieldName[0] == _T('\0') || lpFileName == NULL || !PathFileExists(lpFileName) ) return FALSE; CFile cf; BYTE* pBuffer = NULL; if ( !cf.Open(lpFileName, CFile::modeRead) ) return FALSE; DWORD dwLength = cf.GetLength(); pBuffer = new BYTE[dwLength+1]; memset(pBuffer, 0, dwLength + 1); cf.Read(pBuffer, dwLength); cf.Close(); BOOL bResult = AppenChunkFromBuffer(lpTableName, lpFieldName, pBuffer, dwLength); if ( pBuffer ) { delete []pBuffer; pBuffer = NULL; } return bResult; } /************************************************************************/ /* ������AppenChunkFromBuffer[4/13/2016 IT]; /* ��������ָ���Ļ�������Ѷ���������д���ֶ���; /* ������; /* [IN] lpTableName������; /* [IN] lpFieldName���ֶ���; /* [IN] lpBuffer������������; /* [IN] nBuflen����������С; /* ���أ�void; /* ע�⣺; /* ʾ����; /* /* �ģ�; /* ���ڣ�; /* ���ݣ�; /************************************************************************/ BOOL AdoImpl::AppenChunkFromBuffer(IN LPCTSTR lpTableName, IN LPCTSTR lpFieldName, IN BYTE* lpBuffer, IN const int& nBuflen) { if ( lpTableName == NULL || lpTableName[0] == _T('\0') || lpFieldName == NULL || lpFieldName[0] == _T('\0') || lpBuffer == NULL ) return FALSE; EnterCriticalSection( &m_csAdo ); BOOL bResult = GetADODateBaseStatus(); if( FALSE == bResult ){ LeaveCriticalSection( &m_csAdo ); return FALSE; } CADORecordset *pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection( &m_csAdo ); if( NULL == pRSet ) return -1; TCHAR szSQL[2048] = {0}; _stprintf_s(szSQL, _T("select %s from %s"), lpFieldName, lpTableName); // д�����ƴ��ļ�ʱ,_RecordSetPtr������adUseSever��ʽ��,�����²��ɹ�; bResult = OpenADORecordSet(pRSet, szSQL, adUseServer); if( FALSE == bResult ) { return FALSE; } pRSet->Edit(); bResult = pRSet->AppendChunk(lpFieldName, lpBuffer, nBuflen); if ( bResult ) { pRSet->Update(); } DeleteADORecordSet(pRSet); return bResult; } BOOL AdoImpl::GetBinary(IN LPCTSTR lpTableName, IN LPCTSTR lpFieldName, IN LPCTSTR lpCitizenIdNumber, LPVOID lpData) { EnterCriticalSection(&m_csAdo); BOOL bResult = GetADODateBaseStatus(); if (FALSE == bResult) { LeaveCriticalSection(&m_csAdo); return FALSE; } CADORecordset *pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection(&m_csAdo); if (NULL == pRSet) return -1; TCHAR szSQL[2048] = { 0 }; #if 0 _stprintf_s(szSQL, _T("select %s from %s where [staff_citizen_id_number] = '%s'"), lpFieldName, lpTableName, lpCitizenIdNumber); // д�����ƴ��ļ�ʱ,_RecordSetPtr������adUseSever��ʽ��,�����²��ɹ�; bResult = OpenADORecordSet(pRSet, szSQL, CADORecordset::openQuery); if (FALSE == bResult) { return FALSE; } TCHAR szDirectory[MAX_PATH] = {0}; _stprintf_s(szDirectory, _T("%sstaff_Image\\identity_card_image\\%s.jpg"), g_szModulePath, lpCitizenIdNumber); bResult = pRSet->GetChunkToFile(lpFieldName, szDirectory); #else #if 0 _stprintf_s(szSQL, _T("select %s,staff_citizen_id_number from %s"), lpFieldName, lpTableName); // д�����ƴ��ļ�ʱ,_RecordSetPtr������adUseSever��ʽ��,�����²��ɹ�; bResult = OpenADORecordSet(pRSet, szSQL, CADORecordset::openQuery); if (FALSE == bResult) { return FALSE; } CString str; TCHAR szDirectory[MAX_PATH] = { 0 }; while (!pRSet->IsEOF()) { if (pRSet->GetFieldValue(_T("staff_citizen_id_number"), str)) { _stprintf_s(szDirectory, _T("%sstaff_Image\\identity_card_image\\%s.jpg"), g_szModulePath, str); bResult = pRSet->GetChunkToFile(lpFieldName, szDirectory); } pRSet->MoveNext(); } #else _stprintf_s(szSQL, _T("select %s,idno from %s"), lpFieldName, lpTableName); // д�����ƴ��ļ�ʱ,_RecordSetPtr������adUseSever��ʽ��,�����²��ɹ�; bResult = OpenADORecordSet(pRSet, szSQL, CADORecordset::openQuery); if (FALSE == bResult) { return FALSE; } CString str; TCHAR szDirectory[MAX_PATH] = { 0 }; while (!pRSet->IsEOF()) { if (pRSet->GetFieldValue(_T("idno"), str)) { str.Trim(); _stprintf_s(szDirectory, _T("%sstaff\\%s\\����֤��\\"), g_szModulePath, str); SHCreateDirectory(NULL, szDirectory); _stprintf_s(szDirectory, _T("%sstaff\\%s\\����֤��\\%s.jpg"), g_szModulePath, str, str); bResult = pRSet->GetChunkToFile(lpFieldName, szDirectory); } pRSet->MoveNext(); } #endif #endif DeleteADORecordSet(pRSet); return 0; } BOOL AdoImpl::GetOrderContractImage(IN LPCTSTR lpTableName, IN LPCTSTR lpFieldName, IN LPCTSTR lpCitizenIdNumber, LPVOID lpData) { EnterCriticalSection(&m_csAdo); BOOL bResult = GetADODateBaseStatus(); if (FALSE == bResult) { LeaveCriticalSection(&m_csAdo); return FALSE; } CADORecordset *pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection(&m_csAdo); if (NULL == pRSet) return -1; TCHAR szSQL[2048] = { 0 }; _stprintf_s(szSQL, _T("select %s,id from %s"), lpFieldName, lpTableName); // д�����ƴ��ļ�ʱ,_RecordSetPtr������adUseSever��ʽ��,�����²��ɹ�; bResult = OpenADORecordSet(pRSet, szSQL, CADORecordset::openQuery); if (FALSE == bResult) { return FALSE; } CString str; TCHAR szDirectory[MAX_PATH] = { 0 }; TCHAR szFile[MAX_PATH] = {0}; while (!pRSet->IsEOF()) { if (pRSet->GetFieldValue(_T("id"), str)) { str.Trim(); _stprintf_s(szDirectory, _T("%sOrderContract\\%s\\"), g_szModulePath, str); SHCreateDirectory(NULL, szDirectory); _stprintf_s(szFile, _T("%sOrderContract\\%s\\ERP��ͬ.jpg"), g_szModulePath, str); bResult = pRSet->GetChunkToFile(lpFieldName, szFile); if (bResult == 0) RemoveDirectory(szDirectory); else WriteTextLog(_T("%s %s\\ERP��ͬ.jpg"), str, str); } pRSet->MoveNext(); } DeleteADORecordSet(pRSet); return 0; } BOOL AdoImpl::GetOrderOtherContractImage(IN LPCTSTR lpTableName, IN LPCTSTR lpFieldName, IN LPCTSTR lpCitizenIdNumber, LPVOID lpData) { EnterCriticalSection(&m_csAdo); BOOL bResult = GetADODateBaseStatus(); if (FALSE == bResult) { LeaveCriticalSection(&m_csAdo); return FALSE; } CADORecordset *pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection(&m_csAdo); if (NULL == pRSet) return -1; TCHAR szSQL[2048] = { 0 }; _stprintf_s(szSQL, _T("select %s,id,[date] from %s"), lpFieldName, lpTableName); // д�����ƴ��ļ�ʱ,_RecordSetPtr������adUseSever��ʽ��,�����²��ɹ�; bResult = OpenADORecordSet(pRSet, szSQL, CADORecordset::openQuery); if (FALSE == bResult) { return FALSE; } CString strOrder; CString strDateTime; TCHAR szDirectory[MAX_PATH] = { 0 }; TCHAR szFile[MAX_PATH] = { 0 }; BOOL bPath = FALSE; while (!pRSet->IsEOF()) { if (pRSet->GetFieldValue(_T("id"), strOrder)) { strOrder.Trim(); if (pRSet->GetFieldValue(_T("date"), strDateTime) ) { strDateTime.Remove(':'); strDateTime.Remove('-'); strDateTime.Remove(' '); _stprintf_s(szDirectory, _T("%sOrderContract\\%s\\"), g_szModulePath, strOrder); bPath = TRUE; if (!PathFileExists(szDirectory)) { bPath = FALSE; SHCreateDirectory(NULL, szDirectory); } _stprintf_s(szFile, _T("%sOrderContract\\%s\\������ͬ%s.jpg"), g_szModulePath, strOrder, strDateTime); bResult = pRSet->GetChunkToFile(lpFieldName, szFile); if (!bPath && bResult == 0) RemoveDirectory(szDirectory); else WriteTextLog(_T("%s %s\\������ͬ%s.jpg"), strOrder, strOrder, strDateTime); } } pRSet->MoveNext(); } DeleteADORecordSet(pRSet); return 0; } BOOL AdoImpl::GetChargeAgainstRevenueImage(IN LPCTSTR lpTableName, IN LPCTSTR lpFieldName, IN LPCTSTR lpCitizenIdNumber, LPVOID lpData) { EnterCriticalSection(&m_csAdo); BOOL bResult = GetADODateBaseStatus(); if (FALSE == bResult) { LeaveCriticalSection(&m_csAdo); return FALSE; } CADORecordset *pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection(&m_csAdo); if (NULL == pRSet) return -1; TCHAR szSQL[2048] = { 0 }; _stprintf_s(szSQL, _T("select %s,id from %s"), lpFieldName, lpTableName); // д�����ƴ��ļ�ʱ,_RecordSetPtr������adUseSever��ʽ��,�����²��ɹ�; bResult = OpenADORecordSet(pRSet, szSQL, CADORecordset::openQuery); if (FALSE == bResult) { return FALSE; } CString strOrder; TCHAR szDirectory[MAX_PATH] = { 0 }; _stprintf_s(szDirectory, _T("%s����֧��\\"), g_szModulePath); SHCreateDirectory(NULL, szDirectory); while (!pRSet->IsEOF()) { if (pRSet->GetFieldValue(_T("id"), strOrder)) { strOrder.Trim(); _stprintf_s(szDirectory, _T("%s����֧��\\%s.jpg"), g_szModulePath, strOrder); bResult = pRSet->GetChunkToFile(lpFieldName, szDirectory); } pRSet->MoveNext(); } DeleteADORecordSet(pRSet); return 0; } BOOL AdoImpl::GetOtherRevenueImage(IN LPCTSTR lpTableName, IN LPCTSTR lpFieldName, IN LPCTSTR lpCitizenIdNumber, LPVOID lpData) { EnterCriticalSection(&m_csAdo); BOOL bResult = GetADODateBaseStatus(); if (FALSE == bResult) { LeaveCriticalSection(&m_csAdo); return FALSE; } CADORecordset *pRSet = new CADORecordset(m_pADODatabase); LeaveCriticalSection(&m_csAdo); if (NULL == pRSet) return -1; TCHAR szSQL[2048] = { 0 }; _stprintf_s(szSQL, _T("select %s,id,[date] from %s"), lpFieldName, lpTableName); // д�����ƴ��ļ�ʱ,_RecordSetPtr������adUseSever��ʽ��,�����²��ɹ�; bResult = OpenADORecordSet(pRSet, szSQL, CADORecordset::openQuery); if (FALSE == bResult) { return FALSE; } CString strOrder; CString strDateTime; TCHAR szDirectory[MAX_PATH] = { 0 }; while (!pRSet->IsEOF()) { if (pRSet->GetFieldValue(_T("id"), strOrder)) { strOrder.Trim(); if (pRSet->GetFieldValue(_T("date"), strDateTime)) { strDateTime.Remove(':'); strDateTime.Remove('-'); strDateTime.Remove(' '); _stprintf_s(szDirectory, _T("%sOrderContract\\%s\\������ͬ\\"), g_szModulePath, strOrder); SHCreateDirectory(NULL, szDirectory); _stprintf_s(szDirectory, _T("%sOrderContract\\%s\\������ͬ\\%s.jpg"), g_szModulePath, strOrder, strDateTime); bResult = pRSet->GetChunkToFile(lpFieldName, szDirectory); } } pRSet->MoveNext(); } DeleteADORecordSet(pRSet); return 0; }