相关的代码如下:
          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);时程序就过不去了,也没捕捉到任何错误提示,就是执行不下去了.请问这是什么原因?

解决方案 »

  1.   

    你可以用 _RecordsetPtr 尝试,看有没有问题
      

  2.   

    用_RecordsetPtr 很定是没有问题的.我想进一步了解的是_CommandPtr的用法.
      

  3.   

    是不是CommandPtr来不及释放等什么原因,然后不能重复执行
    一点猜测 ^_^
      

  4.   

    是不是CommandPtr来不及释放等什么原因,然后不能重复执行
    一点猜测 ^_^
      

  5.   

    以前调试的时候,没有捕捉到任何异常,就是不能执行下去了。
    今天我重新调试的时候,捕捉到了一个异常:就是向存储过程传递的参数太多。
    myCommand1->Parameters->Refresh();好像没有起作用。
    请问还有别的方法可以释放掉myCommand1的参数吗?
      

  6.   

    问题解决了。
    用错了myCommand1->Parameters->Refresh();
    因该用myCommand1->Parameters->Release();
      

  7.   

    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]);
    放到循环之外!
      

  8.   

    我需要多次执行存储过程,其中有一个参数的值是不同的。要用到myRecord->GetCollect("user_name"));基本功能是对某个组的成员分别发送消息的。
    放到循环之外,好像不行吧。有一种办法是可以的,就是把
             CommandPtr    myCommand1;
              myCommand1.CreateInstance(_uuidof(Command));
              myCommand1->ActiveConnection=myConn;
              myCommand1->CommandText="send_message";
    放到循环之内,但是我不想这样做。我觉得这样太浪费资源了。
      

  9.   

    嗯,放循环中,就每次都要创建一个command指针
      

  10.   

    就只能这样吗?
    但这样不好释放掉command指针。我在循环结尾调用myCommand1->release()的时候,当退出这一圈的时候,程序就会出错,执行不下去了。不知是怎么回事。