Files
envi-code/SourceCode/Code2026/sqliteserver/UIISQLiteServer.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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;
}