调用带输出参数ADO的内存泄露问题
BOOL DBModeDeal::Get_BSRINFO(NSRINFO* m2nsrinfo)
{ //调用存储过程//1217等待填充和修改
_ParameterPtr para[3];
_CommandPtr pCmd;
_bstr_t storeproc("p_getNsrjbxxFromMk2ToWsbs");//p_getNsrjbxxFromMk2ToWsbs
_variant_t var,var1;
int index = 0;
try
{
pCmd.CreateInstance(__uuidof(Command));
para[0].CreateInstance("ADODB.Parameter");
para[1].CreateInstance("ADODB.Parameter");
para[2].CreateInstance("ADODB.Parameter");
pCmd->ActiveConnection=m_M2pConn;
pCmd->CommandText=storeproc;
SetPara(para[0],pCmd,"YHSBH1",m2nsrinfo->sNSRSBH,adBSTR,adParamInput,100,var);//纳税人识别号
SetPara(para[1],pCmd,"SWJG_DM1","",adVarChar,adParamOutput,100,var);//字符串型输出参数,结果
SetPara(para[2],pCmd,"YHMC1","",adVarChar,adParamOutput,300,var1);//字符串型输出参数,名称
pCmd->Execute( NULL, NULL, adCmdStoredProc);
var=pCmd->Parameters->GetItem("SWJG_DM1")->GetValue();//通过参数返回值
m2nsrinfo->sSWJG_DM = GetVaule(var);
var1=pCmd->Parameters->GetItem("YHMC1")->GetValue();//通过参数返回值
m2nsrinfo->sYHMC = GetVaule(var1);
pCmd.Detach();
return TRUE;
}
catch (_com_error e) {
const TCHAR* pError=e.ErrorMessage();
// AfxMessageBox(pError);
return FALSE;
}
return TRUE;
}
其中
void DBModeDeal::SetPara(_ParameterPtr para,_CommandPtr pCmd, CString NodeName,CString NodeValue,DataTypeEnum ParaType,ParameterDirectionEnum ParaIoType,int CharLen,_variant_t var)
{
int index=0;
if (ParaIoType == adParamInput)//输入参数
{
para=pCmd->CreateParameter(_bstr_t(NodeName), ParaType,ParaIoType,
sizeof(NodeValue),_variant_t(NodeValue)); //字符串型输入参数,
pCmd->Parameters->Append(para);
}
if (ParaIoType == adParamOutput)//输出参数
{
var.Clear();
var = (short)index;
para=pCmd->CreateParameter(_bstr_t(NodeName), ParaType,ParaIoType,
sizeof(char[50]),var); //字符串型输出参数,错误信息
pCmd->Parameters->Append(para);
}
}
为何调用完成后内存增长却不降低呢,程序长时间运行后虚拟内存就增长的比较大,大虾救我。