分享到:
发表于 2017-06-09 10:14:35 楼主 | |
#pragma warning(disable:4146) #import "C:\Program Files\Common Files\System\ado\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF") #pragma warning(default:4146) using namespace ADODB; 2.编写函数调用存储过程 /保存数据库记录 void SaveDbTran(char *devID,char * traceNo,char *refNo,char *batchNo, char * bankCardNo, char * tranDate, char * tranTime,char * amt,char * hosCardNo,char * hosName,char * hosIDCardNo, char *msg) { //2.1创建数据库连接句柄 _ConnectionPtr pMyConnect; HRESULT hr; try { //2.1.1组建连接数据库字符串 char *dbConStr = new char[400]; strcpy(dbConStr,"Provider=SQLOLEDB;Server=sqlserver服务器地址,1433;Databbse=数据库名;uid=登陆用户;pwd=登录密码"); CoInitialize(NULL); Sleep(300); //2.1.2 句柄实例化 实现连接 hr = pMyConnect.CreateInstance("ADODB.Connection"); if(SUCCEEDED(hr)) { ct.SaveLog("创建数据库连接对象成功,等待打开连接",0,dbConStr); pMyConnect->Open(_bstr_t(dbConStr),"","",adModeUnknown); } else { CoUninitialize(); return; } } catch(_com_error &err) { CoUninitialize(); return ; } //2.2组建运行命令参数句柄 _CommandPtr m_pCommand; _RecordsetPtr m_pRecordset; try { //2.2.1 句柄实例化 m_pCommand.CreateInstance(__uuidof(Command));//Command无需改变 m_pCommand->ActiveConnection = pMyConnect;//pMyConnect 为连接数据库句柄 m_pCommand->CommandType = adCmdStoredProc;//adCmdStoredProc无需改变 m_pCommand->CommandText = _bstr_t("p_d_tra");//p_d_tra为存储过程名 //2.2.2 设置给可变参数赋值 _variant_t vv_dotype,vv_TranNo,vv_devID,vv_TranDate,vv_TranTime; _variant_t vv_RetCode,vv_BusType,vv_CardNo,vv_IDCard,vv_Name; _variant_t vv_Amt,vv_Notes,vv_SerID,vv_DesCont,vv_tranFlag; _variant_t vv_bankCardNo,vv_bankGroupNo,vv_bankFlowNo,vv_DevName,vv_ExeCount; // value to variant vv_dotype =_variant_t(_bstr_t("1")); vv_TranNo =_variant_t(_bstr_t(temp_traceNo)); vv_devID =_variant_t(_bstr_t(devID)); vv_TranDate =_variant_t(_bstr_t(datetime)); vv_TranTime =_variant_t(_bstr_t(datetime)); vv_RetCode =_variant_t(_bstr_t("")); vv_BusType =_variant_t(_bstr_t("14")); vv_CardNo =_variant_t(_bstr_t(hosCardNo)); vv_IDCard =_variant_t(_bstr_t(hosIDCardNo)); vv_Name = _variant_t(_bstr_t(hosName)); vv_Amt =_variant_t(_bstr_t(amt)); vv_Notes =_variant_t(_bstr_t("交易成功")); vv_SerID =_variant_t(_bstr_t("")); vv_DesCont =_variant_t(_bstr_t("")); vv_tranFlag =_variant_t(_bstr_t("0")); vv_bankCardNo =_variant_t(_bstr_t(temp_bankCardNo)); vv_bankGroupNo=_variant_t(_bstr_t(batchNo)); vv_bankFlowNo =_variant_t(_bstr_t(refNo)); vv_DevName =_variant_t(_bstr_t("")); vv_ExeCount = _variant_t(ret_ExeCount); //2.2.3创建数据库存储过程输入参数 _ParameterPtr mp_dotype,mp_TranNo,mp_devID,mp_TranDate,mp_TranTime; _ParameterPtr mp_RetCode,mp_BusType,mp_CardNo,mp_IDCard,mp_Name; _ParameterPtr mp_Amt,mp_Notes,mp_SerID,mp_DesCont,mp_tranFlag; _ParameterPtr mp_bankCardNo,mp_bankGroupNo,mp_bankFlowNo,mp_DevName,mp_ExeCount; //2.2.3.1给数据库参数实例化 //create ParameterPtr instance mp_dotype.CreateInstance(__uuidof(Parameter)); mp_TranNo.CreateInstance(__uuidof(Parameter)); mp_devID.CreateInstance(__uuidof(Parameter)); mp_TranDate.CreateInstance(__uuidof(Parameter)); mp_TranTime.CreateInstance(__uuidof(Parameter)); mp_RetCode.CreateInstance(__uuidof(Parameter)); mp_BusType.CreateInstance(__uuidof(Parameter)); mp_CardNo.CreateInstance(__uuidof(Parameter)); mp_IDCard.CreateInstance(__uuidof(Parameter)); mp_Name.CreateInstance(__uuidof(Parameter)); mp_Amt.CreateInstance(__uuidof(Parameter)); mp_Notes.CreateInstance(__uuidof(Parameter)); mp_SerID.CreateInstance(__uuidof(Parameter)); mp_DesCont.CreateInstance(__uuidof(Parameter)); mp_tranFlag.CreateInstance(__uuidof(Parameter)); mp_bankCardNo.CreateInstance(__uuidof(Parameter)); mp_bankGroupNo.CreateInstance(__uuidof(Parameter)); mp_bankFlowNo.CreateInstance(__uuidof(Parameter)); mp_DevName.CreateInstance(__uuidof(Parameter)); mp_ExeCount.CreateInstance(__uuidof(Parameter)); //2.2.3.2将数据库参数追加到 命令变量句柄的参数属性末尾 //append parameterPtr set to _CommandPtr parameters lists //数据库参数 = 命令变量句柄->创建参数方法(_bstr_t("存储过程参数名"),存储过程参数数据类型,存储过程参数输入输出类型,默认大小,可变参数值) mp_dotype=m_pCommand->CreateParameter(_bstr_t("dotype"),adInteger,adParamInput,-1,vv_dotype);//整数类型 m_pCommand->Parameters->Append(mp_dotype); mp_TranNo=m_pCommand->CreateParameter(_bstr_t("TranNo"),adVarChar,adParamInput,32,vv_TranNo); //字符串类型 m_pCommand->Parameters->Append(mp_TranNo); mp_devID=m_pCommand->CreateParameter(_bstr_t("devID"),adVarChar,adParamInput,20,vv_devID); m_pCommand->Parameters->Append(mp_devID); mp_TranDate=m_pCommand->CreateParameter(_bstr_t("TranDate"),adVarChar,adParamInput,25,vv_TranDate);//时间类型 m_pCommand->Parameters->Append(mp_TranDate); mp_TranTime=m_pCommand->CreateParameter(_bstr_t("TranTime"),adVarChar,adParamInput,25,vv_TranTime); m_pCommand->Parameters->Append(mp_TranTime); mp_RetCode=m_pCommand->CreateParameter(_bstr_t("RetCode"),adVarChar,adParamInput,20,vv_RetCode); m_pCommand->Parameters->Append(mp_RetCode); mp_BusType=m_pCommand->CreateParameter(_bstr_t("BusType"),adInteger,adParamInput,-1,vv_BusType); m_pCommand->Parameters->Append(mp_BusType); mp_CardNo=m_pCommand->CreateParameter(_bstr_t("CardNo"),adVarChar,adParamInput,20,vv_CardNo); m_pCommand->Parameters->Append(mp_CardNo); mp_IDCard=m_pCommand->CreateParameter(_bstr_t("IDCard"),adVarChar,adParamInput,20,vv_IDCard); m_pCommand->Parameters->Append(mp_IDCard); mp_Name=m_pCommand->CreateParameter(_bstr_t("Name"),adVarChar,adParamInput,10,vv_Name); m_pCommand->Parameters->Append(mp_Name); mp_Amt=m_pCommand->CreateParameter(_bstr_t("Amt"),adDecimal,adParamInput,10,vv_Amt);//浮点数类型 mp_Amt->NumericScale = 2; //设置小数点后位数 mp_Amt->Precision = 10; //设置整数位位数 m_pCommand->Parameters->Append(mp_Amt); mp_Notes=m_pCommand->CreateParameter(_bstr_t("Notes"),adVarChar,adParamInput,2000,vv_Notes); m_pCommand->Parameters->Append(mp_Notes); mp_SerID=m_pCommand->CreateParameter(_bstr_t("SerID"),adVarChar,adParamInput,20,vv_SerID); m_pCommand->Parameters->Append(mp_SerID); mp_DesCont=m_pCommand->CreateParameter(_bstr_t("DesCont"),adVarChar,adParamInput,2000,vv_DesCont); m_pCommand->Parameters->Append(mp_DesCont); mp_tranFlag=m_pCommand->CreateParameter(_bstr_t("tranFlag"),adInteger,adParamInput,-1,vv_tranFlag); m_pCommand->Parameters->Append(mp_tranFlag); mp_bankCardNo=m_pCommand->CreateParameter(_bstr_t("bankCardNo"),adVarChar,adParamInput,25,vv_bankCardNo); m_pCommand->Parameters->Append(mp_bankCardNo); mp_bankGroupNo=m_pCommand->CreateParameter(_bstr_t("bankGroupNo"),adVarChar,adParamInput,12,vv_bankGroupNo); m_pCommand->Parameters->Append(mp_bankGroupNo); mp_bankFlowNo=m_pCommand->CreateParameter(_bstr_t("bankFlowNo"),adVarChar,adParamInput,12,vv_bankFlowNo); m_pCommand->Parameters->Append(mp_bankFlowNo); mp_DevName=m_pCommand->CreateParameter(_bstr_t("DevName"),adVarChar,adParamInput,40,vv_DevName); m_pCommand->Parameters->Append(mp_DevName); mp_ExeCount=m_pCommand->CreateParameter(_bstr_t("ExeCount"),adInteger,adParamOutput,-1,vv_ExeCount);//输出类型 m_pCommand->Parameters->Append(mp_ExeCount); //2.2.4 执行得到结果 _variant_t vNull; vNull.vt = VT_ERROR; vNull.scode = DISP_E_PARAMNOTFOUND; //2.2.4.1执行数据库存储过程 m_pRecordset = m_pCommand->Execute(&vNull,&vNull,adCmdStoredProc);//adCmdStoredProc不要改变 //m_pRecordset执行SQL结果 可对其进行判断确定成功,错误原因 if (mp_ExeCount->Value != 0) { ct.SaveLog("插入数据失败",0,""); } else { ct.SaveLog("插入数据成功",0,""); } } catch(_com_error &err) { if(pMyConnect->State) pMyConnect->Close(); pMyConnect = NULL; CoUninitialize(); } //2.2.5 关闭连接 释放资源 if(pMyConnect->State) pMyConnect->Close(); pMyConnect = NULL; CoUninitialize(); //切记成功与否都要调用 以释放资源 return ; } |
|
楼主热贴
个性签名:无
|
针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员 、 查看帮助 或 给我提意见