相关的代码如下:
CommandPtr myCommand1;
myCommand1.CreateInstance(_uuidof(Command));
myCommand1->ActiveConnection=myConn;
myCommand1->CommandText="send_message";
CString strSQL="select user_name from user_role where role_name='erpOperator' ";
//得到一个结果集,返回组成员名单
_RecordsetPtr myRecord=pApp->GetRecordset(strSQL,myConn.GetInterfacePtr());
if(myRecord)
{
while(!myRecord->adoEOF)
{
myParam[0]=myCommand1->CreateParameter ("@from",adVarChar,adParamInput,20*sizeof(adVarChar),_variant_t(pApp->m_account.username));
myCommand1->Parameters->Append(myParam[0]);
myParam[1]=myCommand1->CreateParameter("@to",adVarChar,adParamInput,20*sizeof(adVarChar),myRecord->GetCollect("user_name"));
myCommand1->Parameters->Append(myParam[1]);
myParam[2]=myCommand1->CreateParameter("@subject",adVarChar,adParamInput,100*sizeof(adVarChar),_variant_t("新料号"));
myCommand1->Parameters->Append(myParam[2]);
myParam[3]=myCommand1->CreateParameter("@content",adVarChar,adParamInput,100*sizeof(adVarChar),_variant_t("你有新的料号到来"));
myCommand1->Parameters->Append(myParam[3]);
myCommand1->Execute(NULL,NULL,adCmdStoredProc);
myCommand1->Parameters->Refresh();
myRecord->MoveNext();
}
}
}
catch(_com_error e)
{
AfxMessageBox(LPCTSTR(e.Description()));
return ;
}
当第二次执行到myCommand1->Execute(NULL,NULL,adCmdStoredProc);时程序就过不去了,也没捕捉到任何错误提示,就是执行不下去了.请问这是什么原因?
CommandPtr myCommand1;
myCommand1.CreateInstance(_uuidof(Command));
myCommand1->ActiveConnection=myConn;
myCommand1->CommandText="send_message";
CString strSQL="select user_name from user_role where role_name='erpOperator' ";
//得到一个结果集,返回组成员名单
_RecordsetPtr myRecord=pApp->GetRecordset(strSQL,myConn.GetInterfacePtr());
if(myRecord)
{
while(!myRecord->adoEOF)
{
myParam[0]=myCommand1->CreateParameter ("@from",adVarChar,adParamInput,20*sizeof(adVarChar),_variant_t(pApp->m_account.username));
myCommand1->Parameters->Append(myParam[0]);
myParam[1]=myCommand1->CreateParameter("@to",adVarChar,adParamInput,20*sizeof(adVarChar),myRecord->GetCollect("user_name"));
myCommand1->Parameters->Append(myParam[1]);
myParam[2]=myCommand1->CreateParameter("@subject",adVarChar,adParamInput,100*sizeof(adVarChar),_variant_t("新料号"));
myCommand1->Parameters->Append(myParam[2]);
myParam[3]=myCommand1->CreateParameter("@content",adVarChar,adParamInput,100*sizeof(adVarChar),_variant_t("你有新的料号到来"));
myCommand1->Parameters->Append(myParam[3]);
myCommand1->Execute(NULL,NULL,adCmdStoredProc);
myCommand1->Parameters->Refresh();
myRecord->MoveNext();
}
}
}
catch(_com_error e)
{
AfxMessageBox(LPCTSTR(e.Description()));
return ;
}
当第二次执行到myCommand1->Execute(NULL,NULL,adCmdStoredProc);时程序就过不去了,也没捕捉到任何错误提示,就是执行不下去了.请问这是什么原因?
解决方案 »
- 关于MFC头文件和库的疑惑
- 用VC7编译以前的项目,出来73处错误,用VC6就没报错误,现在怎么解决?谢谢大家指教
- 求一个MFC做的Com例子
- XP 风格后,Slider 控件选中区问题
- ~~~~~~~How to serialize Class In atl without MFC~~~~~~
- 如何禁止一个CEdit控件的拷贝粘贴功能。在线等。
- delphi中,调用vc++写的dll函数是遇到的问题,一起讨论!
- 为什么dll调试跟踪不进去
- winsock,c/s结构是什么?
- 有关钩子函数的应用。为什么按下一个键,确收到N多的按下这个键的消息???(代码如下)
- 连接sybase的时候,在debug时正常,装成服务出现连接不上,这个一般是什么问题啊
- 一个CDatabase和CRecordset,反复修改CRecordset,再UPdate,有难度哟,请进!
一点猜测 ^_^
一点猜测 ^_^
今天我重新调试的时候,捕捉到了一个异常:就是向存储过程传递的参数太多。
myCommand1->Parameters->Refresh();好像没有起作用。
请问还有别的方法可以释放掉myCommand1的参数吗?
用错了myCommand1->Parameters->Refresh();
因该用myCommand1->Parameters->Release();
myCommand1->Parameters->Append(myParam[0]);
myParam[1]=myCommand1->CreateParameter("@to",adVarChar,adParamInput,20*sizeof(adVarChar),myRecord->GetCollect("user_name"));
myCommand1->Parameters->Append(myParam[1]);
myParam[2]=myCommand1->CreateParameter("@subject",adVarChar,adParamInput,100*sizeof(adVarChar),_variant_t("新料号"));
myCommand1->Parameters->Append(myParam[2]);
myParam[3]=myCommand1->CreateParameter("@content",adVarChar,adParamInput,100*sizeof(adVarChar),_variant_t("你有新的料号到来"));
myCommand1->Parameters->Append(myParam[3]);
放到循环之外!
放到循环之外,好像不行吧。有一种办法是可以的,就是把
CommandPtr myCommand1;
myCommand1.CreateInstance(_uuidof(Command));
myCommand1->ActiveConnection=myConn;
myCommand1->CommandText="send_message";
放到循环之内,但是我不想这样做。我觉得这样太浪费资源了。
但这样不好释放掉command指针。我在循环结尾调用myCommand1->release()的时候,当退出这一圈的时候,程序就会出错,执行不下去了。不知是怎么回事。