#include "StdAfx.h" #include "UIISQLiteServer.h" #include "UIIImpSQLiteServer.h" #include "UIIADORXServer.h" #include "Base64.h" extern HINSTANCE _hdllInstance; CUIISQLiteServer::CUIISQLiteServer(void) { m_pSQLiteDb = NULL; m_pADORxDb = NULL; ::CoInitialize(NULL); } CUIISQLiteServer::~CUIISQLiteServer(void) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; delete pImp; } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; delete pAdo; } ::CoUninitialize(); } BOOL CUIISQLiteServer::TryInitSQLServer(LPCTSTR pszDbFileName) { TCHAR sDrive[MAX_PATH],sDir[MAX_PATH],sFileName[MAX_PATH],sExt[MAX_PATH]; #ifdef _UNICODE _wsplitpath(pszDbFileName, sDrive, sDir, sFileName, sExt); #else _splitpath(pszDbFileName, sDrive, sDir, sFileName, sExt); #endif CString sProductIni; sProductIni.Format(_T("%s%sproduct.ini"),sDrive,sDir); CString _sSQLSrvName,_sDatabase,_sUser,_sPWD,sVal; TCHAR szVal[MAX_PATH]; if ( ::GetPrivateProfileString(_T("Product"), _T("SQLServer"), _T(""), szVal, MAX_PATH, sProductIni) > 0) { _sSQLSrvName = szVal; if (_sSQLSrvName.IsEmpty()) return FALSE; //userid if ( ::GetPrivateProfileString(_T("Product"), _T("UserID"), _T(""), szVal, MAX_PATH, sProductIni) > 0 ) { //去除干扰 CString sVal = szVal; if (sVal.IsEmpty()) return FALSE; sVal.TrimRight(_T("sh")); _tcscpy(szVal,sVal); const char *psz(_bstr_t((LPCTSTR)szVal)); std::string suser = psz; //解密 std::string suserM = Base64::Decode(suser); std::wstring swuserM = Base64::ansii2Unicode(suserM.c_str(),CP_UTF8); _sUser = swuserM.c_str(); } //password if (::GetPrivateProfileString(_T("Product"), _T("Password"), _T(""), szVal, MAX_PATH, sProductIni) > 0) { //去除干扰 sVal = szVal; if (sVal.IsEmpty()) return FALSE; sVal.TrimRight(_T("rm")); _tcscpy(szVal,sVal); const char *psz(_bstr_t((LPCTSTR)szVal)); std::string spwd = psz; //解密 std::string spwdM = Base64::Decode(spwd); std::wstring swpwdM = Base64::ansii2Unicode(spwdM.c_str(),CP_UTF8); _sPWD = swpwdM.c_str(); } //filename作为数据库名 _sDatabase = sFileName; CString sConnect; sConnect.Format(_T("Driver=SQL Server;Server=%s;Database=%s;User Id=%s;Password=%s;"), _sSQLSrvName, _sDatabase, _sUser, _sPWD); //不弹出提示 m_pADORxDb = new CUIIADORXServer; CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->InitADOServer(sConnect,false); } return FALSE; } BOOL CUIISQLiteServer::InitADOServer(LPCTSTR pszDbFileName,bool bTraySQLServer/* = true*/) { CString sFile = pszDbFileName; sFile.MakeLower(); if (bTraySQLServer) { if (TryInitSQLServer(pszDbFileName)) { return TRUE; } } if (sFile.Find(_T(".mdb")) != -1 || sFile.Find(_T(".xls")) != -1) { m_pADORxDb = new CUIIADORXServer; CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->InitADOServer(pszDbFileName); } else { m_pSQLiteDb = new CUIIImpSQLiteServer; CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->InitADOServer(pszDbFileName); } return FALSE; } BOOL CUIISQLiteServer::InitSQLServer(LPCTSTR pszConnection,bool bDisplayException) { m_pADORxDb = new CUIIADORXServer; CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->InitADOServer(pszConnection,bDisplayException); } BOOL CUIISQLiteServer::CreateDBTable(LPCTSTR pszTableName,Ttable& arFields) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->CreateDBTable(pszTableName,arFields); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->CreateOLEDBTable(pszTableName,arFields); } return FALSE; } BOOL CUIISQLiteServer::IsDbTableExist(LPCTSTR pszTableName) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->IsDbTableExist(pszTableName); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; CStringList listNames; pAdo->GetOLDBTableNameList(listNames); if (listNames.Find(pszTableName) != NULL) return TRUE; } return FALSE; } BOOL CUIISQLiteServer::GetTableStru(LPCTSTR pszTableName,Ttable& arFields,BOOL bTypeAsSQLite) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetTableStru(pszTableName,arFields,bTypeAsSQLite); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSQLSrvTableStru(pszTableName,arFields); } return FALSE; } BOOL CUIISQLiteServer::GetTableStru(LPCTSTR pszTableName,CStringList& listField) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetTableStru(pszTableName,listField); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSQLSrvTableStru(pszTableName,listField); } return FALSE; } BOOL CUIISQLiteServer::DeleteTable(LPCTSTR pszTableName) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->DeleteTable(pszTableName); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->DeleteTable(pszTableName); } return FALSE; } BOOL CUIISQLiteServer::DeleteTable(CStringArray& arTableNames) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->DeleteTable(arTableNames); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->DeleteTable(arTableNames); } return FALSE; } BOOL CUIISQLiteServer::DeleteTableFields(LPCTSTR pszTableName,CStringArray& arFields) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->DeleteTableFields(pszTableName,arFields); } if (m_pADORxDb != NULL) { //un imp return FALSE; } return FALSE; } BOOL CUIISQLiteServer::DeleteTableFields(LPCTSTR pszTableName,LPCTSTR pszFields) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->DeleteTableFields(pszTableName,pszFields); } if (m_pADORxDb != NULL) { //un imp return FALSE; } return FALSE; } BOOL CUIISQLiteServer::AppendTableFields(LPCTSTR pszTableName,Ttable& arFields) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->AppendTableFields(pszTableName,arFields); } if (m_pADORxDb != NULL) { //un imp return FALSE; } return FALSE; } BOOL CUIISQLiteServer::AppendTableFields(LPCTSTR pszTableName, CUIITableField& arFields) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->AppendTableFields(pszTableName,arFields); } if (m_pADORxDb != NULL) { //un imp return FALSE; } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszStrSQL,CString& sValue) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszStrSQL,sValue); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszStrSQL,sValue); } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszStrSQL,CStringArray& arStrValue) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszStrSQL,arStrValue); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszStrSQL,arStrValue); } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszStrSQL, std::vector& arStrValue) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszStrSQL,arStrValue); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszStrSQL,arStrValue); } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszStrSQL,CStringArray& arStrValue,int nFr, int nTo) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszStrSQL,arStrValue,nFr,nTo); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszStrSQL,arStrValue,nFr,nTo); } return FALSE; } BOOL CUIISQLiteServer::IsSelEmpty(LPCTSTR pszStrSQL) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->IsSelEmpty(pszStrSQL); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->IsSelEmpty(pszStrSQL); } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszStrSQL,CStringList& listStrValue,BOOL bMakeLower) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszStrSQL,listStrValue,bMakeLower); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszStrSQL,listStrValue,bMakeLower); } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszStrSQL,CStringList& listStrValue, int nFr, int nTo, BOOL bMakeLower) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszStrSQL,listStrValue,nFr,nTo,bMakeLower); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszStrSQL,listStrValue,nFr,nTo,bMakeLower); } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszStrSQL,CUIIValueTable& valueTable,BOOL bUpdateLable) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszStrSQL,valueTable,bUpdateLable); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszStrSQL,valueTable,bUpdateLable); } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszStrSQL,CUIIValueTable& valueTable, int nFr, int nTo, BOOL bUpdateLable) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszStrSQL,valueTable,nFr,nTo,bUpdateLable); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszStrSQL,valueTable,nFr,nTo,bUpdateLable); } return FALSE; } //选取两列,一个为Key,一个为Value建map int CUIISQLiteServer::GetSelData(LPCTSTR pszSKey_ValueSQL,CMapStringToString& mapKey_Value) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszSKey_ValueSQL,mapKey_Value); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszSKey_ValueSQL,mapKey_Value); } return FALSE; } int CUIISQLiteServer::GetSelData(LPCTSTR pszSKey_ValueSQL, std::map& mapKey_Value) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelData(pszSKey_ValueSQL, mapKey_Value); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelData(pszSKey_ValueSQL, mapKey_Value); } return FALSE; } //选取一行,获得Field到对应数据的映射 int CUIISQLiteServer::GetSelDataEx(LPCTSTR pszSelectSQL,CMapStringToString& mapFieldToValue) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelDataEx(pszSelectSQL,mapFieldToValue); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelDataEx(pszSelectSQL,mapFieldToValue); } return FALSE; } int CUIISQLiteServer::GetSelDataEx(LPCTSTR pszSelectSQL, std::map& mapFieldToValue) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelDataEx(pszSelectSQL, mapFieldToValue); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelDataEx(pszSelectSQL, mapFieldToValue); } return FALSE; } int CUIISQLiteServer::GetSelDataEx(LPCTSTR pszSelectSQL, std::vector>& datas) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelDataEx(pszSelectSQL, datas); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelDataEx(pszSelectSQL, datas); } return false; } int CUIISQLiteServer::GetSelDataEx(LPCTSTR pszSelectSQL, std::vector> &datas) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer *pImp = (CUIIImpSQLiteServer *)m_pSQLiteDb; return pImp->GetSelDataEx(pszSelectSQL, datas); } if (m_pADORxDb != NULL) { CUIIADORXServer *pAdo = (CUIIADORXServer *)m_pADORxDb; return pAdo->GetSelDataEx(pszSelectSQL, datas); } return false; } //blob 操作 //insert into table (id,name,picture) values (0,'namestr',?) //table 对应 id,name 的数据 int CUIISQLiteServer::InsertBlob(LPCTSTR pszSQL,void* pData,int nSize) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->InsertBlob(pszSQL,pData,nSize); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->InsertBlob(pszSQL,pData,nSize); } return FALSE; } int CUIISQLiteServer::InsertBlob(LPCTSTR pszSQL,LPCTSTR pszFile) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->InsertBlob(pszSQL,pszFile); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->InsertBlob(pszSQL,pszFile); } return FALSE; } //update table set id=,name='namestr',picture=? where ... int CUIISQLiteServer::UpdateBlob(LPCTSTR pszSQL,void* pData,int nSize) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->UpdateBlob(pszSQL,pData,nSize); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->UpdateBlob(pszSQL,pData,nSize); } return FALSE; } int CUIISQLiteServer::UpdateBlob(LPCTSTR pszSQL,LPCTSTR pszFile) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->UpdateBlob(pszSQL,pszFile); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->UpdateBlob(pszSQL,pszFile); } return FALSE; } //select picture from table where id=... int CUIISQLiteServer::GetSelBlob(LPCTSTR pszSQL,void*& pData,int& nSize) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelBlob(pszSQL,pData,nSize); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelBlob(pszSQL,pData,nSize); } return FALSE; } int CUIISQLiteServer::GetSelBlob(LPCTSTR pszSQL,LPCTSTR pszFilePath) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->GetSelBlob(pszSQL,pszFilePath); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetSelBlob(pszSQL,pszFilePath); } return FALSE; } void CUIISQLiteServer::GetDbTableNameArray(CStringArray& arTables) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; pImp->GetDbTableNameArray(arTables); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; pAdo->GetOLDBTableNameArray(arTables); } } void CUIISQLiteServer::GetDBTableNameList(CStringList& listTables) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; pImp->GetDBTableNameList(listTables); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->GetOLDBTableNameList(listTables); } } BOOL CUIISQLiteServer::ExecuteSQL(LPCTSTR pszStrSQL) { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->ExecuteSQL(pszStrSQL); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; return pAdo->ExecuteSQL(pszStrSQL); } return FALSE; } BOOL CUIISQLiteServer::IsDatabaseOpen() { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; return pImp->IsDatabaseOpen(); } if (m_pADORxDb != NULL) { return TRUE; } return FALSE; } void CUIISQLiteServer::BeginTrans() { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; pImp->BeginTrans(); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; pAdo->BeginTrans(); } } void CUIISQLiteServer::RollbackTrans() { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; pImp->RollbackTrans(); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; pAdo->RollbackTrans(); } } void CUIISQLiteServer::CommitTrans() { if (m_pSQLiteDb != NULL) { CUIIImpSQLiteServer* pImp = (CUIIImpSQLiteServer*)m_pSQLiteDb; pImp->CommitTrans(); } if (m_pADORxDb != NULL) { CUIIADORXServer* pAdo = (CUIIADORXServer*)m_pADORxDb; pAdo->CommitTrans(); } } static bool FormatPackageInsSQL(CString& sSQL,LPCTSTR pszTblName,const Ttable& arFields1,LPCTSTR pszPackageField,CUIIValueRecord& valRec,BOOL bIsPackageSQL) { CString sTmp,sVal,sValues,sType,sFNames; sSQL = _T(""); sFNames = _T("("); sValues = _T("("); sSQL.Format(_T("insert into %s "),pszTblName); for(int i = 0;i < arFields1.GetSize();i++) { const CUIITableField& field = arFields1.GetAt(i); valRec.GetValue(i,sVal); sFNames += _T('['); sFNames += field.m_sFieldName; sFNames += _T(']'); sFNames += _T(","); sType = field.m_sFieldType; if (sType.CompareNoCase(_T("text")) == 0 || sType.CompareNoCase(_T("varchar")) == 0 || sType.CompareNoCase(_T("ntext")) == 0 || sType.CompareNoCase(_T("char")) == 0 || sType.CompareNoCase(_T("nvarchar")) == 0 ) { //sTmp.Format(_T("'%s'"),sVal); sTmp = _T('\''); sTmp += sVal; sTmp += _T('\''); sValues += sTmp; sValues += _T(","); } else if(sType.CompareNoCase(_T("integer")) == 0 || sType.CompareNoCase(_T("int")) == 0) { sTmp.Format(_T("%s"),sVal); sValues += sTmp; sValues += _T(","); } else if(sType.CompareNoCase(_T("real")) == 0 || sType.CompareNoCase(_T("double")) == 0) { sTmp.Format(_T("%s"),sVal); sValues += sTmp; sValues += _T(","); } else//其他默认为字符串类型,不带‘ { sTmp.Format(_T("%s"),sVal); sValues += sTmp; sValues += _T(","); //... } } if (bIsPackageSQL) { sFNames += pszPackageField; sFNames += _T(") "); sValues += _T("?)"); sSQL += sFNames; sSQL += _T(" values "); sSQL += sValues; return true; } else { sFNames.TrimRight(_T(",")); sFNames += _T(") "); sValues.TrimRight(_T(",")); sValues += _T(")"); sSQL += sFNames; sSQL += _T(" values "); sSQL += sValues; return true; } return false; } //static 注意 上华的表如果有image,binary 则必须有ID 字段 BOOL CUIISQLiteServer::SQLite3Data2SQLServer(LPCTSTR pszDbFileName,LPCTSTR pszDbName,LPCTSTR pszConnection) { if (pszDbFileName == NULL || pszConnection == NULL || pszDbName == NULL) return FALSE; CUIISQLiteServer dbSrv; if ( !dbSrv.InitADOServer(pszDbFileName,false) ) return FALSE; CUIISQLiteServer sqlSrv; if (!sqlSrv.InitSQLServer(pszConnection,false)) { AfxMessageBox(_T("连接主数据库失败!")); return FALSE; } CStringArray arTbls; dbSrv.GetDbTableNameArray(arTbls); BOOL bSuccess = FALSE; CString sTbl,sTblFile,sLine,sSQL,sSQL2; for (int i = 0;i < arTbls.GetSize();i++) { sTbl = arTbls.GetAt(i); Ttable arFields; dbSrv.GetTableStru(sTbl,arFields,FALSE); if (!sqlSrv.IsDbTableExist(sTbl)) { bSuccess = sqlSrv.CreateDBTable(sTbl,arFields); } else { sqlSrv.DeleteTable(sTbl); bSuccess = sqlSrv.CreateDBTable(sTbl,arFields); } if (bSuccess) { sSQL2.Format(_T("set identity_insert %s on"),sTbl); sqlSrv.ExecuteSQL(sSQL2); CMapStringToString mapID2N; CString sSelFields = _T(""),sField,sPackageField,sSelImge,sIDVal,sN; //image,binary 数据特殊处理 Ttable arFields1,arFields2; for(int n = 0;n < arFields.GetSize();n++) { CUIITableField& field = arFields.GetAt(n); if ( field.m_sFieldType.CompareNoCase(_T("image")) == 0 || field.m_sFieldType.CompareNoCase(_T("binary")) == 0 || field.m_sFieldType.CompareNoCase(_T("blob")) == 0) { arFields2.Add(field); sField.Format(_T("[%s] "),field.m_sFieldName); sSelImge += sField; } else { if (field.m_sFieldName.CompareNoCase(_T("id")) == 0) { field.m_sFieldName.MakeUpper(); } sField.Format(_T("[%s] "),field.m_sFieldName); sSelFields += sField; sSelFields += _T(","); arFields1.Add(field); } if (field.m_sFieldName.CompareNoCase(_T("id")) == 0) { sN.Format(_T("%d"),n); field.m_sFieldName.MakeUpper(); mapID2N.SetAt(field.m_sFieldName,sN); } } int nRes = 0; if (arFields2.GetSize() > 0) { //有二进制包的数据迁移 sSelFields.TrimRight(_T(",")); if (mapID2N.Lookup(_T("ID"),sN)) sSQL.Format(_T("select %s from %s order by id"),sSelFields,sTbl); else sSQL.Format(_T("select %s from %s"),sSelFields,sTbl); CUIIValueTable valTbl; dbSrv.GetSelData(sSQL,valTbl,TRUE); //把valtbl迁入 sqlserver CStringArray arLable; valTbl.GetLableRecord(arLable); for (int n = 0;n < valTbl.GetTableLogicSize();n++) { CUIIValueRecord valRec; valTbl.GetValueRecord(n,valRec); //插入带 imge,binary数据段 if (mapID2N.Lookup(_T("ID"),sN)) { valRec.GetValue(_ttoi(sN),sIDVal); for(int k = 0;k < arFields2.GetSize();k++) { //package 字段 sPackageField = arFields2.GetAt(k).m_sFieldName; //select package from table where id=1000 sSQL.Format(_T("select %s from %s where id=%s"),sPackageField,sTbl,sIDVal); void* pData = NULL; int nSize = 0; dbSrv.GetSelBlob(sSQL,pData,nSize); if (pData != NULL) { if ( k == 0)//只需要插入一次记录即可 { sSQL = _T(""); if ( FormatPackageInsSQL(sSQL,sTbl,arFields1,sPackageField,valRec,TRUE) ) { //预插入字段,给package留出?位置 nRes = sqlSrv.InsertBlob(sSQL,pData,nSize); } } //更新?位置的二进制数据 sSQL.Format(_T("update %s set %s=? where id=%s"),sTbl,sPackageField,sIDVal); nRes = sqlSrv.UpdateBlob(sSQL,pData,nSize); delete [] pData; } else//没有二进制数据,常规插入 { sSQL = _T(""); if ( FormatPackageInsSQL(sSQL,sTbl,arFields1,sPackageField,valRec,FALSE) ) { nRes = sqlSrv.ExecuteSQL(sSQL); } } } } else { //id field not find } } } else { //数据迁移 sSQL.Format(_T("select * from %s"),sTbl); CUIIValueTable valTbl; dbSrv.GetSelData(sSQL,valTbl,TRUE); //把valtbl迁入 sqlserver CStringArray arLable; valTbl.GetLableRecord(arLable); for (int n = 0;n < valTbl.GetTableLogicSize();n++) { CUIIValueRecord valRec; valTbl.GetValueRecord(n,valRec); sSQL = _T(""); sPackageField = _T(""); //插入一条记录 if ( FormatPackageInsSQL(sSQL,sTbl,arFields1,sPackageField,valRec,FALSE) ) { nRes = sqlSrv.ExecuteSQL(sSQL); } } } sSQL2.Format(_T("set identity_insert %s off"), sTbl); sqlSrv.ExecuteSQL(sSQL2); } } return bSuccess; }