1038 lines
24 KiB
C++
1038 lines
24 KiB
C++
#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<CString>& 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<CString, CString>& 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<CString, CString>& 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<std::vector<CString>>& 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<std::map<CString, CString>> &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;
|
|
} |