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

📄 dbadmin.cpp

📁 本源码为移动公司话费查询中间件TUXEDO使用的实例
💻 CPP
📖 第 1 页 / 共 3 页
字号:

//////////////////////////////////////////////////////////////////////////
//		
//
//
//
//
///////////////////////////////////////////////////////////////////////////
#include "dbadmin.h"

#include <string.h>

#include <stdio.h>

#include <stdlib.h>
/********************************************************************
*function:	cut space ' ' from right of input string
*parameters:	string '\0'
*return:
*by:		zhangjinde 2002/6/30
*
*warn:		it must be '\0' that the most right of iput string,
*		otherwise the space can not cut
********************************************************************/

CDBAdmin::CDBAdmin()
{
	//DBConnectDatabase();
}

CDBAdmin::~CDBAdmin()
{
	//DBDisconnectDatabase();
}

/********************************************************************
*function:	handle error when execute sql 
*parameters:	
*return:	0:success; 100:not found;<0 :error
*by:		zhangjinde 2002/6/30
*
********************************************************************/

void CDBAdmin::DBSQLError()
{
	char pchSQL[516];
	_CommandPtr pCmd;
	_RecordsetPtr pRs = NULL;
	HRESULT hr;
	_variant_t	paramval;

	sprintf(pchSQL,"rollback;");

	try {
		hr = pCmd.CreateInstance(__uuidof(Command));
		if(FAILED(hr))
			return;
		pCmd->ActiveConnection = m_pCon;
		pCmd->CommandType = adCmdText;
		pCmd->CommandText = _bstr_t(pchSQL);

		pRs = pCmd->Execute(NULL, NULL, adCmdText);

		if (pRs == NULL )
		{
			return;
		}
	}
	catch (_com_error &e) {
		printf (e.Description());
	}
	
}

/********************************************************************
*function:	connect to batabse via user/password@dbstring
*parameters:	
*return:	0:success;<0:error
*by:		zhangjinde 2002/6/30
*
********************************************************************/

int CDBAdmin::DBConnectDatabase(char *pszDsnName, char *pszDBUser, char *pszDBPassword)
{
	try {
		HRESULT hr;
		hr = m_pCon.CreateInstance(__uuidof(Connection));
		
		if (FAILED(hr))
		{
			printf("CreateInstance error");
			return -1;
		}

		hr = m_pCon->Open(pszDsnName, pszDBUser, pszDBPassword, adConnectUnspecified);
//		hr = m_pCon->Open("Provider=MSDAORA.1;Password=known;User ID=known;Data Source=known_dbf;Persist Security Info=True", 
//			pszDBUser, pszDBPassword, adConnectUnspecified);//adConnectUnspecified
		if (FAILED(hr))
		{
			printf("Open error");
			return -1;
		}
	}
//	catch (...) {
//		return -1;
//	}
	catch (_com_error &e) {
		printf (e.Description());
		return -1;
	}
	return 0;
}
/********************************************************************
*function:	logout from database
*parameters:	
*return:	
*by:		zhangjinde 2002/6/30
*
********************************************************************/
void CDBAdmin::DBDisconnectDatabase()
{
	try {
		m_pCon->Close ();
		m_pCon = NULL;
	}
	catch(...) {
//		return -1;
	}
	return;
}
/********************************************************************
*function:	validate password
*parameters:	
*return:
*by:		zhangjinde 2002/6/30
*
********************************************************************/
int CDBAdmin::DBCheckOperPasswd(long nPrintId, char *szUserName,char *szPasswd,int *pnPrivilege)
{
/*	SELECT op.oper_level
		FROM OPERATOR  op, BUSINESSPOS bp , PRINTPOS pp
		WHERE op.oper_name=user_id
                            AND  bp.business_id=pp.business_id
                            AND op.business_id=bp.business_id 
                            AND pp.pos_no = print_id
			    AND op.oper_passwd=user_pass;

*/
	char pchSQL[516];
	_CommandPtr pCmd;
	_RecordsetPtr pRs = NULL;
	HRESULT hr;
	_variant_t	paramval;

	sprintf(pchSQL,"SELECT op.oper_level FROM OPERATOR  op, BUSINESSPOS bp , PRINTPOS pp "
		"WHERE op.oper_name='%s' AND  bp.business_id=pp.business_id AND op.business_id=bp.business_id "
        "AND pp.pos_no = %d AND op.oper_passwd='%s';",szUserName,nPrintId,szPasswd);

	try {
		hr = pCmd.CreateInstance(__uuidof(Command));
		if(FAILED(hr))
			return 0;
		pCmd->ActiveConnection = m_pCon;
		pCmd->CommandType = adCmdText;
		pCmd->CommandText = _bstr_t(pchSQL);

		pRs = pCmd->Execute(NULL, NULL, adCmdText);

		if (pRs == NULL )
		{
			return -1;
		}

		pRs->MoveFirst();


		paramval.Clear();
		paramval = pRs->Fields->GetItem(0l)->Value;
		*pnPrivilege = atoi((char*)_bstr_t(paramval));

	}
	catch (_com_error &e) {
		printf (e.Description());
		*pnPrivilege = -1;
		return 1;
	}
	
	return 0;
}

/********************************************************************
*function:	改操作员密码
*parameters:
*return:	<0:error ;=0:sucess; =1403:oldpassword is error
*by:		zhangjinde 2002/6/30
*
********************************************************************/

int CDBAdmin::DBChangeOperPasswd(long lPosNO,char *szUserName,char *szOldPasswd,char *szNewPasswd)
{
//UPDATE "OPERATOR" SET oper_passwd =  '' WHERE oper_name = 'OPERATORNAME' and business_id='Oper_BusinessId';
	char pchSQL[516];
	_CommandPtr pCmd;
	_RecordsetPtr pRs = NULL;
	HRESULT hr;
	_variant_t	paramval;

	long busid = 0;

	sprintf(pchSQL,"select business_id from printpos where pos_no= %d;",lPosNO);


//	sprintf(pchSQL,"UPDATE \"OPERATOR\" SET oper_passwd =  '%s' "
//		"WHERE oper_name = '%s' and business_id = '%s';",

	try {

		//取营业厅ID
		hr = pCmd.CreateInstance(__uuidof(Command));
		if(FAILED(hr))
			return 0;
		pCmd->ActiveConnection = m_pCon;
		pCmd->CommandType = adCmdText;
		pCmd->CommandText = _bstr_t(pchSQL);

		pRs = pCmd->Execute(NULL, NULL, adCmdText);

		if (pRs == NULL )
		{
			return -1;
		}

		pRs->MoveFirst();

		paramval.Clear();
		paramval = pRs->Fields->GetItem(0l)->Value;
		busid = atoi((char*)_bstr_t(paramval));

		//改变密码
		sprintf(pchSQL,"UPDATE \"OPERATOR\" SET oper_passwd =  '%s' "
			"WHERE oper_name = '%s' and business_id = %d;",szNewPasswd,szUserName,busid);
		pCmd->CommandType = adCmdText;
		pCmd->CommandText = _bstr_t(pchSQL);
		pRs = pCmd->Execute(NULL, NULL, adCmdText);

		if (pRs == NULL )
		{
			return -1;
		}
	}
	catch (_com_error &e) {
		DBSQLError();
		printf (e.Description());
		return 1;
	}
	
	return 0;
}

//根据打印终端ip查询,pos_no,business_id,
//
//
//
int CDBAdmin::DBQueryPosByIp(char *szPosIp, long &lPosNo, long &lBusinessId, char *szCaption, char *szBusinessAddr, char *szAreaCode, char *szFonts)
{
	char pchSQL[516];
	_CommandPtr pCmd;
	_RecordsetPtr pRs = NULL;
	HRESULT hr;
	_variant_t	paramval;

	sprintf(pchSQL,"select pp.pos_no,pp.business_id,LTRIM(RTRIM(pp.pos_fonts)),ltrim(rtrim(pp.caption)),LTRIM(RTRIM(bp.business_addr)),LTRIM(RTRIM(aa.area_code)) from "
		"printpos pp,businesspos bp, area aa where (pp.business_id = bp.business_id) "
		"AND (bp.area_id = aa.area_id) AND (LTRIM(RTRIM(pp.pos_ip)) = '%s') "
		"AND bp.isuse = 'USE' AND pp.isuse = 'USE';",szPosIp);

	try {
		hr = pCmd.CreateInstance(__uuidof(Command));
		if(FAILED(hr))
			return 0;
		pCmd->ActiveConnection = m_pCon;
		pCmd->CommandType = adCmdText;
		pCmd->CommandText = _bstr_t(pchSQL);

		pRs = pCmd->Execute(NULL, NULL, adCmdText);

		if (pRs == NULL )
		{
			return -1;
		}

		pRs->MoveFirst();

		paramval.Clear();
		paramval = pRs->Fields->GetItem(0l)->Value;
		lPosNo = atoi((char*)_bstr_t(paramval));

		paramval.Clear();
		paramval = pRs->Fields->GetItem(1l)->Value;
		lBusinessId = atoi((char*)_bstr_t(paramval));

		paramval.Clear();
		paramval = pRs->Fields->GetItem(2l)->Value;
		if(paramval.vt != VT_NULL)
			strcpy(szFonts,(char*)_bstr_t(paramval));
		else
			szFonts[0] = '\0';

		paramval.Clear();
		paramval = pRs->Fields->GetItem(3l)->Value;
		if(paramval.vt != VT_NULL)
			strcpy(szCaption,(char*)_bstr_t(paramval));
		else
			szCaption[0] = '\0';

		paramval.Clear();
		paramval = pRs->Fields->GetItem(4l)->Value;
		if(paramval.vt != VT_NULL)
			strcpy(szBusinessAddr,(char*)_bstr_t(paramval));
		else
			szBusinessAddr[0] = '\0';

		paramval.Clear();
		paramval = pRs->Fields->GetItem(5l)->Value;
		if(paramval.vt != VT_NULL)
			strcpy(szAreaCode,(char*)_bstr_t(paramval));
		else
			szAreaCode[0] = '\0';
	}
/*
	_CommandPtr pCmd;
	_ParameterPtr param;

	HRESULT hr;
	long lRet = 10;

	try {
		hr = pCmd.CreateInstance(__uuidof(Command));
		if(FAILED(hr))
			return NULL;
		pCmd->ActiveConnection = m_pCon;
		pCmd->CommandType = adCmdStoredProc;
		pCmd->CommandText = _bstr_t("print_ip");

		param = pCmd->CreateParameter("@UserName",adBSTR,adParamInput,sizeof(char[20]),_bstr_t(szPosIp));
		pCmd->Parameters->Append(param);


		param = pCmd->CreateParameter("@lPosNo",adInteger,adParamOutput,sizeof(_variant_t),lPosNo);
		pCmd->Parameters->Append(param);

		param = pCmd->CreateParameter("@lBusinessId",adInteger,adParamOutput,sizeof(_variant_t),lBusinessId);
		pCmd->Parameters->Append(param);

		param = pCmd->CreateParameter("@Caption",adBSTR,adParamOutput,sizeof(char[50]),_bstr_t(szCaption));
		pCmd->Parameters->Append(param);

		param = pCmd->CreateParameter("@BusAddr",adBSTR,adParamOutput,sizeof(char[50]),szBusinessAddr);
		pCmd->Parameters->Append(param);

		param = pCmd->CreateParameter("@lRet",adInteger,adParamOutput,sizeof(_variant_t),lRet);
		pCmd->Parameters->Append(param);

		pCmd->Execute(NULL, NULL, adCmdStoredProc);



	}
//	catch (...) {
//		return -1;
//	}
*/	catch (_com_error &e) {
		printf (e.Description());
		return 1;
	}
//
	return 0;//lRet;

}


/********************************************************************
*function:	插入一条打印的记录
*parameters:
*return:	0:sucess;<0:失败
*by:		zhangjinde 2002/6/30
*
********************************************************************/

int CDBAdmin::DBAddPrintRecord(long lOperId,long lPrtPosId,char *szPhoneNumber,char *szAcctMonth,
				char *szCallType,char *szBeginTime, char *szEndTime,
				int nLineCount,long lCallFee, int nPrintedFee)
{
/*	INSERT INTO printinfo values(
	SEQ_PRINTINFO_ID.NEXTVAL,
	1,
	1,
	'139123456',
	SYSDATE,
	TO_DATE('200208','YYYYMM'),
	'',
	'',
	1000,
	2034,
	0);
	
	COMMIT;

	INSERT INTO operator values(
	1,
	'139123456',
	'1',
	0,
	'123456',
	2);
*/
	char pchSQL[516];
	_CommandPtr pCmd;
	_RecordsetPtr pRs = NULL;
	HRESULT hr;
	_variant_t	paramval;

	sprintf(pchSQL,"INSERT INTO printinfo values(SEQ_PRINTINFO_ID.NEXTVAL,"
		"%d, %d,'%s', '%s',SYSDATE,to_date('%s','YYYYMM'),'','',"
	//	"%d, %d,%d,'0');",
		"%d, %d,%d,'0');",
		lOperId,lPrtPosId,szCallType,szPhoneNumber,szAcctMonth,nLineCount,lCallFee,nPrintedFee);

⌨️ 快捷键说明

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