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

📄 pbdll01.cpp

📁 这是我开发的利用vc++的ado接口连接并操作sqlserver和oracle的dll动态库。数据库的参数从配置文件pb.ini读取
💻 CPP
字号:
// pbdll01.cpp : 定义 DLL 的初始化例程。
//

#include "stdafx.h"
#include "pbdll01.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
//		则从此 DLL 导出的任何调入
//		MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
//		该函数的最前面。
//
//		例如:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// 此处为普通函数体
//		}
//
//		此宏先于任何 MFC 调用
//		出现在每个函数中十分重要。这意味着
//		它必须作为函数中的第一个语句
//		出现,甚至先于所有对象变量声明,
//		这是因为它们的构造函数可能生成 MFC
//		DLL 调用。
//
//		有关其他详细信息,
//		请参阅 MFC 技术说明 33 和 58。
//


// Cpbdll01App

BEGIN_MESSAGE_MAP(Cpbdll01App, CWinApp)
END_MESSAGE_MAP()


// Cpbdll01App 构造

Cpbdll01App::Cpbdll01App()
{
	// TODO: 在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 Cpbdll01App 对象

Cpbdll01App theApp;


// Cpbdll01App 初始化

BOOL Cpbdll01App::InitInstance()
{
	CWinApp::InitInstance();

	return TRUE;
}

void init(char DBType) 
{ 
	TCHAR exeFullPath[MAX_PATH]; // MAX_PATH在API中有定义,为128
	int len=GetModuleFileName(NULL,
		exeFullPath, //应用程序的全路径存放地址
		MAX_PATH);
	CString path=_T("\\pb.ini"); //配置文件名
	//::strcpy((char *)exeFullPath+len-10,(char *)path.GetBuffer()); //组合出配置文件的全路径
	::strcpy((char *)exeFullPath+len-10,(char *)path.GetBuffer()); //组合出配置文件的全路径

	char DataSource[256];
	char uid[256];
	char pwd[256];
	char Server[256];
	char Database[256];
    //USES_CONVERSION; 

	if(DBType == '1') {   
		GetPrivateProfileString("ORACLE", //节名
			"DataSource", //项名
			"No Text", //没找到此项时的返回值
			DataSource, //目标缓冲区地址
			256, //目标缓冲区长度
			exeFullPath);
		GetPrivateProfileString("ORACLE", //节名
			"uid", //项名
			"No Text", //没找到此项时的返回值
			uid, //目标缓冲区地址
			256, //目标缓冲区长度
			exeFullPath); //配置文件的准确路径
		GetPrivateProfileString("ORACLE", //节名
			"pwd", //项名
			"No Text", //没找到此项时的返回值
			pwd, //目标缓冲区地址
			256, //目标缓冲区长度
			exeFullPath); //配置文件的准确路径
	}
		if(DBType == '2') {
			GetPrivateProfileString("SQL SERVER", //节名
			"Server", //项名
			"No Text", //没找到此项时的返回值
			Server, //目标缓冲区地址
			256, //目标缓冲区长度
			exeFullPath); //配置文件的准确路径
			GetPrivateProfileString("SQL SERVER", //节名
			"Database", //项名
			"No Text", //没找到此项时的返回值
			Database, //目标缓冲区地址
			256, //目标缓冲区长度
			exeFullPath); //配置文件的准确路径
			GetPrivateProfileString("SQL SERVER", //节名
			"uid", //项名
			"No Text", //没找到此项时的返回值
			uid, //目标缓冲区地址
			256, //目标缓冲区长度
			exeFullPath); //配置文件的准确路径
			GetPrivateProfileString("SQL SERVER", //节名
			"pwd", //项名
			"No Text", //没找到此项时的返回值
			pwd, //目标缓冲区地址
			256, //目标缓冲区长度
			exeFullPath); //配置文件的准确路径			
		}


		::CoInitialize(NULL);
		INFO info;
	
		try 
		{
			// 创建Connection对象 
			m_pConnection.CreateInstance("ADODB.Connection");
			// 设置连接字符串,必须是BSTR型或者_bstr_t类型
			if(DBType == '2') {
				char strConnect_sql[256];
				::strcpy(strConnect_sql,"Provider=SQLOLEDB;Server=");
				::strcat(strConnect_sql,Server);
				::strcat(strConnect_sql,";Database=");
				::strcat(strConnect_sql,Database);
				::strcat(strConnect_sql,";");
				m_pConnection->Open(strConnect_sql,(_bstr_t)uid,(_bstr_t)pwd,adModeUnknown);
			}
			if(DBType == '1') {
				char strConnect_orc[256];
				::strcpy(strConnect_orc,"Provider=MSDAORA.1;Data Source=");
				::strcat(strConnect_orc,DataSource);
				::strcat(strConnect_orc,";");
				m_pConnection->Open(strConnect_orc,(_bstr_t)uid,(_bstr_t)pwd,adModeUnknown);
			}
			//若数据库在网络上则Server为形如(192.168.1.5,3340)
			if(m_pConnection==NULL) 
				cerr<<"Lind data ERROR!\n"; 
			// 创建记录集对象 
			m_pRecordset.CreateInstance(__uuidof(Recordset)); 
			// 取得表中的记录 
			m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(), 
				adOpenDynamic,adLockOptimistic,adCmdText); 
		}
		catch(_com_error e) 
		{
			// 显示错误信息 
			cerr << "\nERROR:" << (char*)e.Description();
			//抛出异常
		}
}

void payment()
{
	INFO info;
	try
	{
		_variant_t varea,vins,vorgan,vsub,vdrug;
		float v11 = 0,v21 = 0,v22 = 0,v23 = 0,v24 = 0,result = 0;  //分别对应不同险种的分段编码
		float t1 = 0,t2 = 0,t3 = 0 ,t4 = 0;
		cout << "0-5000    5000-10000   10000-30000    30000以上   PAYMENT"; 
		cout << "\n----------------------------------------------------------------\n"; 
		cout << "\n请输入您的医药信息和报销金额\n"; 
		cout << "所属地区:"; 
		cin >> info.area; 
		cout << "\n险种编码:"; 
		cin >> info.insurance; 
		cout << "\n医疗机构类型:"; 
		cin >> info.organ; 
		cout << "\n总金额:"; 
		cin >> info.money; 
		
		if(info.money < 30000) {  //计算分段金额
			t4 = 0;
			if(info.money < 10000) {
				t3 = 0;
				if(info.money < 5000) {
					t2 = 0;
					if(t1 < 0) {
						t1 = 0;
					}
					else
						t1 = info.money;
				}
				else {
					t2 = info.money - 5000;
					t1 = 5000;
				}
			}
			else {
				t3 = info.money - 10000;
				t2 = 5000;
				t1 = 5000;
			}
		}
		else {
			t4 = info.money-30000;
			t3 = 20000;
			t2 = 5000;
			t1 = 5000;
		}

		while (!m_pRecordset->EndOfFile) 
		{
			varea = m_pRecordset->GetCollect("AREA_CODE");
			vins = m_pRecordset->GetCollect("INSURANCE_CODE");
			vorgan = m_pRecordset->GetCollect("ORGAN_LEVEL");
			vsub = m_pRecordset->GetCollect("SUB_CODE");
			vdrug = m_pRecordset->GetCollect("DRUG_PERCENT");
			if (varea.vt != VT_NULL && vins.vt != VT_NULL && vorgan.vt != VT_NULL 
				&& vsub.vt != VT_NULL && vdrug.vt != VT_NULL) 
			{
				cout.setf(ios::left); 
				if(!strcmp((char*)(_bstr_t)varea,info.area)&&!strcmp((char*)(_bstr_t)vins,info.insurance)
					&&!strcmp((char*)(_bstr_t)vorgan,info.organ)) {
						if((char*)(_bstr_t)vins,info.insurance[0] == '1') {
							v21 = v22 = v23 = v24 = (float)vdrug;
						}
						if((char*)(_bstr_t)vins,info.insurance[0] == '2') {
							if((int)vsub == 1)
								v21 = (float)vdrug;
							if((int)vsub == 2)
								v22 = (float)vdrug;
							if((int)vsub == 3)
								v23 = (float)vdrug;
							if((int)vsub == 4)
								v24 = (float)vdrug;
						}
				}//if(strcmp

				cout.unsetf(ios::left); 
			}//if (varea.vt != VT_NU
			m_pRecordset->MoveNext(); ///移到下一条记录 
		}//while (!m_pRecordset->EndOfFile) 

		result = t1 * v21 + t2 * v22 + t3 * v23 + t4 *v24;
		cout << v21 << "	" << v22 << "	" << v23 << "	" << v24 << "	" <<result <<endl;
		m_pRecordset->Close(); // 关闭记录集 
	} 

	// 捕捉异常 
	catch(_com_error e) 
	{
		// 显示错误信息 
		cerr << "\nERROR:" << (char*)e.Description();
		//抛出异常
	} 
	if(m_pConnection->State) 
		m_pConnection->Close(); 
	::CoUninitialize(); 
}

⌨️ 快捷键说明

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