⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mydatabase.cpp

📁 关于联通的一个统一定制程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MyDatabase.cpp: implementation of the CMyDatabase class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyDatabase.h"
#include "0000Thread.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyDatabase::CMyDatabase()
: m_bOpenned(FALSE),
m_bUserOpenned(FALSE)
{
}

CMyDatabase::~CMyDatabase()
{
	CloseDB();
	CloseUserDB();
}

BOOL CMyDatabase::OpenDB()
{
	if (m_bOpenned)
		return TRUE;

	TCHAR path[_MAX_PATH];
	LPTSTR temp = NULL;
	GetModuleFileName(NULL, path, _MAX_PATH);
	temp = strrchr(path, '\\');
	path[temp - path + 1] = '\0';

	CString szLog;
	try
	{
		CoInitialize(NULL);

		CString szCmd;
		szCmd.Format("File Name=%sTYDZ.udl", path);
		TESTHR(m_pConn.CreateInstance(__uuidof(Connection)));
		m_pConn->ConnectionString = _bstr_t(szCmd);
		TESTHR(m_pConn->Open("", "", "", adConnectUnspecified));
		m_bOpenned = TRUE;
	}
	catch (_com_error& e)
	{
		szLog.Format("连接数据库失败!ERROR=%s", (LPTSTR)e.Description());
		theData.WriteLog(szLog, "-db");
		return FALSE;
	}
	catch (...)
	{
		szLog.Format("连接数据库失败!ERROR=%s", "未知错误");
		theData.WriteLog(szLog, "-db");
		return FALSE;
	}

	return TRUE;
}

void CMyDatabase::CloseDB()
{
	try
	{
		m_pConn->Close();
	}
	catch (...)
	{
	}
	try
	{
		m_pConn.Release();
		CoUninitialize();
	}
	catch (...)
	{
	}
	m_pConn=NULL;
	m_bOpenned = FALSE;
}

BOOL CMyDatabase::OpenUserDB()
{
	if (m_bUserOpenned)
		return TRUE;

	TCHAR path[_MAX_PATH];
	LPTSTR temp = NULL;
	GetModuleFileName(NULL, path, _MAX_PATH);
	temp = strrchr(path, '\\');
	path[temp - path + 1] = '\0';

	CString szLog;
	try
	{
		CoInitialize(NULL);

		CString szCmd;
		szCmd.Format("File Name=%sUserDB.udl", path);
		TESTHR(m_pUserConn.CreateInstance(__uuidof(Connection)));
		m_pUserConn->ConnectionString = _bstr_t(szCmd);
		TESTHR(m_pUserConn->Open("", "", "", adConnectUnspecified));
		m_bUserOpenned = TRUE;
	}
	catch (_com_error& e)
	{
		szLog.Format("连接用户数据库失败!ERROR=%s", (LPTSTR)e.Description());
		theData.WriteLog(szLog, "-db");
		return FALSE;
	}
	catch (...)
	{
		szLog.Format("连接用户数据库失败!ERROR=%s", "未知错误");
		theData.WriteLog(szLog, "-db");
		return FALSE;
	}

	return TRUE;
}

void CMyDatabase::CloseUserDB()
{
	try
	{
		m_pUserConn->Close();
	}
	catch (...)
	{
	}
	try
	{
		m_pUserConn.Release();
		CoUninitialize();
	}
	catch (...)
	{
	}
	m_pUserConn=NULL;
	m_bUserOpenned=FALSE;
}

BOOL CMyDatabase::OpenDB(LPCTSTR pszSQL, _ConnectionPtr& pConn)
{
	CString szLog;
	try
	{
		CoInitialize(NULL);

		TESTHR(pConn.CreateInstance(__uuidof(Connection)));
		pConn->ConnectionString = _bstr_t(pszSQL);
		TESTHR(pConn->Open("", "", "", adConnectUnspecified));
	}
	catch (_com_error& e)
	{
		szLog.Format("连接数据库[%s]失败!ERROR=%s", pszSQL, (LPTSTR)e.Description());
		theData.WriteLog(szLog, "-db");
		return FALSE;
	}
	catch (...)
	{
		szLog.Format("连接数据库[%s]失败!ERROR=%s", pszSQL, "未知错误");
		theData.WriteLog(szLog, "-db");
		return FALSE;
	}

	return TRUE;
}

void CMyDatabase::CloseDB(_ConnectionPtr& pConn)
{
	try
	{
		pConn->Close();
	}
	catch (...)
	{
	}
	try
	{
		pConn.Release();
		CoUninitialize();
	}
	catch (...)
	{
	}
}

int CMyDatabase::RegisterUser(LPCTSTR pszMobile, CString& szPassword)
{
	if (!m_bUserOpenned)
	{
		CloseUserDB();
		if (!OpenUserDB())
			return -2;
	}

	CString szLog;
	int nRet=0;
	try
	{
		_CommandPtr pCmd;
		TESTHR(pCmd.CreateInstance(__uuidof(Command)));
		pCmd->ActiveConnection=m_pUserConn;
		pCmd->CommandType=adCmdStoredProc;
		pCmd->CommandText = L"sp_user_register";
		pCmd->Parameters->Refresh();
		pCmd->Parameters->GetItem(1l)->PutValue(pszMobile);
		pCmd->Parameters->GetItem(2l)->PutValue(3l);
		pCmd->Execute(NULL, NULL, adCmdStoredProc);
		nRet=(long)pCmd->Parameters->GetItem(0l)->GetValue();
		_variant_t var=pCmd->Parameters->GetItem(3l)->GetValue();
		if (var.vt!=VT_NULL && var.vt!=VT_EMPTY)
			szPassword=(LPTSTR)_bstr_t(var);
	}
	catch (_com_error& e)
	{
		m_bUserOpenned=FALSE;
		szLog.Format("sp_user_register(%s)中发生异常, ERROR=%s", pszMobile, (LPTSTR)e.Description());
		theData.WriteLog(szLog,"-db");
		return -2;
	}
	catch (...)
	{
		szLog.Format("sp_user_register(%s)中发生异常, 未知错误。", pszMobile);
		theData.WriteLog(szLog,"-db");
		return -2;
	}

	return nRet;
}

int CMyDatabase::GetCommonInfo(LPCOMMONINFO pInfo)
{
	if (!m_bUserOpenned)
	{
		CloseUserDB();
		if (!OpenUserDB())
			return -2;
	}

	CString szLog;
	int nRet=0;
	try
	{
		_CommandPtr pCmd;
		TESTHR(pCmd.CreateInstance(__uuidof(Command)));
		pCmd->ActiveConnection=m_pUserConn;
		pCmd->CommandType=adCmdStoredProc;
		pCmd->CommandText = L"sp_commoninfo_by_mobile";
		pCmd->Parameters->Refresh();
		pCmd->Parameters->GetItem(1l)->PutValue(_bstr_t(pInfo->szMobile));
		pCmd->Execute(NULL, NULL, adCmdStoredProc);
		nRet=(long)pCmd->Parameters->GetItem(0l)->GetValue();
		_variant_t var=pCmd->Parameters->GetItem(2l)->GetValue();
		if (var.vt!=VT_NULL && var.vt!=VT_EMPTY)
			pInfo->nProvince=(long)var;
		var=pCmd->Parameters->GetItem(3l)->GetValue();
		if (var.vt!=VT_NULL && var.vt!=VT_EMPTY)
			pInfo->nArea=(long)var;
		var=pCmd->Parameters->GetItem(4l)->GetValue();
		if (var.vt!=VT_NULL && var.vt!=VT_EMPTY)
			pInfo->szHotline=(LPTSTR)_bstr_t(var);
		var=pCmd->Parameters->GetItem(5l)->GetValue();
		if (var.vt!=VT_NULL && var.vt!=VT_EMPTY)
			pInfo->szEntryno=(LPTSTR)_bstr_t(var);
		var=pCmd->Parameters->GetItem(6l)->GetValue();
		if (var.vt!=VT_NULL && var.vt!=VT_EMPTY)
			pInfo->szGWID=(LPTSTR)_bstr_t(var);
	}
	catch (_com_error& e)
	{
		m_bUserOpenned=FALSE;
		szLog.Format("sp_commoninfo_by_mobile(%s)中发生异常, ERROR=%s", pInfo->szMobile, (LPTSTR)e.Description());
		theData.WriteLog(szLog,"-db");
		return -2;
	}
	catch (...)
	{
		szLog.Format("sp_commoninfo_by_mobile(%s)中发生异常, 未知错误。", pInfo->szMobile);
		theData.WriteLog(szLog,"-db");
		return -2;
	}

	return nRet;
}

BOOL CMyDatabase::AddOneSubConfirm(LPCTSTR pszMobile, LPCTSTR pszCmd, LPCTSTR pszContent, LPCTSTR pszSrcTermId)
{
	if (!m_bOpenned)
	{
		CloseDB();
		if (!OpenDB())
			return FALSE;
	}

	CString szLog;
	BOOL bDone=FALSE;
	try
	{
		_CommandPtr pCmd;
		TESTHR(pCmd.CreateInstance(__uuidof(Command)));
		pCmd->ActiveConnection = m_pConn;
		pCmd->CommandText = L"sp_custom_sed_add";
		pCmd->CommandType = adCmdStoredProc;
		pCmd->Parameters->Refresh();
		pCmd->Parameters->GetItem(1l)->PutValue(pszMobile);
		pCmd->Parameters->GetItem(2l)->PutValue(pszCmd);
		pCmd->Parameters->GetItem(3l)->PutValue(pszContent);
		pCmd->Parameters->GetItem(4l)->PutValue(pszSrcTermId);
		pCmd->Execute(NULL, NULL, adCmdStoredProc);
		long nRet=(long)pCmd->Parameters->GetItem(0l)->GetValue();
		if (nRet==0)
			bDone=TRUE;
	}
	catch (_com_error& e)
	{
		m_bOpenned=FALSE;
		szLog.Format("Failed call stored procedure sp_custom_sed_add('%s'), Description:%s",pszMobile,(LPTSTR)e.Description());
		theData.WriteLog(szLog, "-db");
		return FALSE;
	}
	catch(...)
	{
		szLog.Format("Failed call stored procedure sp_custom_sed_add('%s') for unknow error.",pszMobile);
		theData.WriteLog(szLog, "-db");
		return FALSE;
	}

	return bDone;
}

int CMyDatabase::GetSedHistory(LPCTSTR pszMobile, CString& szCmd, CString& szContent, CString& szSrcTermId, CString& szName, long& nID)
{
	if (!m_bOpenned)
	{
		CloseDB();
		if (!OpenDB())
			return -2;
	}

	CString szLog;
	try
	{
		_CommandPtr pCmd;
		TESTHR(pCmd.CreateInstance(__uuidof(Command)));
		pCmd->ActiveConnection = m_pConn;
		pCmd->CommandText = L"sp_custom_sed_search";
		pCmd->CommandType = adCmdStoredProc;
		pCmd->Parameters->Refresh();
		pCmd->Parameters->GetItem(1l)->PutValue(pszMobile);
		pCmd->Parameters->GetItem(2l)->PutValue((LPCTSTR)szCmd);
		pCmd->Execute(NULL, NULL, adCmdStoredProc);
		long nRet=(long)pCmd->Parameters->GetItem(0l)->GetValue();
		if (nRet!=0)
			return nRet;
		szCmd=(LPTSTR)_bstr_t(pCmd->Parameters->GetItem(2l)->GetValue());
		szContent=(LPTSTR)_bstr_t(pCmd->Parameters->GetItem(3l)->GetValue());
		szSrcTermId=(LPTSTR)_bstr_t(pCmd->Parameters->GetItem(4l)->GetValue());
		szName=(LPTSTR)_bstr_t(pCmd->Parameters->GetItem(5l)->GetValue());
		nID=(long)pCmd->Parameters->GetItem(6l)->GetValue();
	}
	catch (_com_error& e)
	{
		m_bOpenned=FALSE;
		szLog.Format("Failed call stored procedure sp_custom_sed_search('%s'), Description:%s",pszMobile,(LPTSTR)e.Description());
		theData.WriteLog(szLog, "-db");
		return -2;
	}
	catch(...)
	{
		szLog.Format("Failed call stored procedure sp_custom_sed_search('%s') for unknow error.",pszMobile);
		theData.WriteLog(szLog, "-db");
		return -2;
	}

	return 0;
}

int CMyDatabase::SedHistoryDone(long nID)
{
	if (!m_bOpenned)
	{
		CloseDB();
		if (!OpenDB())
			return -2;
	}

	CString szLog;
	try
	{
		_CommandPtr pCmd;
		TESTHR(pCmd.CreateInstance(__uuidof(Command)));
		pCmd->ActiveConnection = m_pConn;
		pCmd->CommandText = L"sp_custom_sed_done";
		pCmd->CommandType = adCmdStoredProc;
		pCmd->Parameters->Refresh();
		pCmd->Parameters->GetItem(1l)->PutValue(nID);
		pCmd->Parameters->GetItem(2l)->PutValue(1l);
		pCmd->Execute(NULL, NULL, adCmdStoredProc);
		long nRet=(long)pCmd->Parameters->GetItem(0l)->GetValue();
		if (nRet!=0)
			return nRet;
	}
	catch (_com_error& e)
	{
		m_bOpenned=FALSE;
		szLog.Format("Failed call stored procedure sp_custom_sed_done('%d'), Description:%s",nID,(LPTSTR)e.Description());
		theData.WriteLog(szLog, "-db");
		return -2;
	}
	catch(...)
	{
		szLog.Format("Failed call stored procedure sp_custom_sed_done('%d') for unknow error.",nID);
		theData.WriteLog(szLog, "-db");
		return -2;
	}

	return 0;
}

int CMyDatabase::AddCustom(LPCTSTR PushType, LPCTSTR CustomerNo, LPCTSTR bSendTime, LPCTSTR eSendTime,
								LPCTSTR ReceiverNo, LPCTSTR Param1, LPCTSTR Param2, long CustomMode)
{
	if (!m_bOpenned)
	{
		CloseDB();
		if (!OpenDB())
			return -2;
	}

	CString szPassword;
	int nRet=RegisterUser(CustomerNo, szPassword);
	if (nRet==-6)
		return -6;
	else if (nRet<0 && nRet!=-3)
		return -2;

	CString szLog;
//	int nRet = 0;
	try
	{
		_CommandPtr pCmd;
		TESTHR(pCmd.CreateInstance(__uuidof(Command)));
		pCmd->ActiveConnection = m_pConn;
		pCmd->CommandText = L"sp_usercustom_add";
		pCmd->CommandType = adCmdStoredProc;
		pCmd->Parameters->Refresh();
		pCmd->Parameters->GetItem(1l)->PutValue(PushType);
		pCmd->Parameters->GetItem(2l)->PutValue(CustomerNo);
		pCmd->Parameters->GetItem(3l)->PutValue(bSendTime);
		pCmd->Parameters->GetItem(4l)->PutValue(eSendTime);
		pCmd->Parameters->GetItem(5l)->PutValue(ReceiverNo);
		pCmd->Parameters->GetItem(6l)->PutValue(Param1);
		pCmd->Parameters->GetItem(7l)->PutValue(Param2);
		pCmd->Parameters->GetItem(8l)->PutValue((long)CustomMode);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -