ExecProc(const   CString&   strProcName,       \\要执行的存储过程名字 
                  long*   returnIntfromProc,             \\存储过程返回值在VC6中对应的变量 
                  const   CString&   strInParam,         \\传递给存储过程的输入参数 
                  CString&   strOutParam)                   \\存储过程的output参数对应的C++变量 

//   定义智能指针,并初始化 
_ConnectionPtr   Conn; 
Conn.CreateInstance(__uuidof(Connection)) 
_CommandPtr   cmd; 
_RecordsetPtr   rsp; 
_ParameterPtr   returnParam,INParam,OutParam; 
try{ 
cmd.CreateInstance(__uuidof(Command)); 
rsp.CreateInstance(__uuidof(Recordset)); 
cmd-> ActiveConnection   =   Conn; 
cmd-> CommandText   =   _bstr_t(strProcName);   
returnParam=cmd-> CreateParameter(_bstr_t("returnParam"),adInteger,adParamReturnValue,sizeof(int)); 
  cmd-> Parameters-> Append(returnParam); 
INParam=cmd-> CreateParameter(_bstr_tINParam"),adBSTR,adParamInput,300,(_variant_t)strInParam); 
cmd-> Parameters-> Append(INParam); 
OutParam=cmd-> CreateParameter(_bstr_t("OutParam"),adBSTR,adParamInput,300); 
cmd-> Parameters-> Append(OutParam); 
cmd-> Execute(NULL,   NULL,   adCmdStoredProc); 
                //   往后的工作是把存储过程的返回值returnParam中的值取到对应的C++变量returnIntfromProc中, 
                //     把存储过程的返回参数OutParam中的值取到对应的C++变量strOutParam //怎么做???!!!

解决方案 »

  1.   

    http://www.itepub.net/html/kaifajingcui/C___VC/2006/0515/38279.html
      

  2.   

    存储过程里带出量inoutParam,在执行存储过程的时候,是要求你带入的,你把带入的参数取出就有返回的值了。
      

  3.   

    ExecProc(const CString& strProcName,   \\要执行的存储过程名字
             long* returnIntfromProc,      \\存储过程返回值在VC6中对应的变量
             const CString& strInParam,    \\传递给存储过程的输入参数
             CString& strOutParam)         \\存储过程的output参数对应的C++变量
    {
    // 定义智能指针,并初始化
    _ConnectionPtr Conn;
    Conn.CreateInstance(__uuidof(Connection))
    _CommandPtr cmd;
    _RecordsetPtr rsp;
    _ParameterPtr returnParam,INParam,OutParam;
    try{
    cmd.CreateInstance(__uuidof(Command));
    rsp.CreateInstance(__uuidof(Recordset));
    cmd->ActiveConnection = Conn;
    cmd->CommandText = _bstr_t(strProcName); 
    returnParam=cmd->CreateParameter(_bstr_t("returnParam"),adInteger,adParamReturnValue,sizeof(int));
      cmd->Parameters->Append(returnParam);
    INParam=cmd->CreateParameter(_bstr_tINParam"),adBSTR,adParamInput,300,(_variant_t)strInParam);
    cmd->Parameters->Append(INParam);
    OutParam=cmd->CreateParameter(_bstr_t("OutParam"),adBSTR,adParamInput,300);
    cmd->Parameters->Append(OutParam);
    cmd->Execute(NULL, NULL, adCmdStoredProc);
            // 往后的工作是把存储过程的返回值returnParam中的值取到对应的C++变量returnIntfromProc中,
            //  把存储过程的返回参数OutParam中的值取到对应的C++变量strOutParam //怎么做???!!!// 按照沙发提供的文章,代码继续如下: 
    _variant_t result = cmd->Parameters->GetItem("returnParam")->GetValue();
    if(result.vt==VT_14)returnIntfromPoc = result.iVal;
    result = cmd->Parameters->GetItem("OutParam")->GetValue();
    if(result.vt==VT_BSTR)strOutParam = result.bstrVal;我在VC6中调试该代码段,存储过程调用能够顺利执行,用查询分析器打开过程中的表结构,都按照设想生成了,但下步取return参数产生异常,
    而我通过注释掉取返回参数的两行,尝试直接读OutPut参数,结果读出的都是"0",而我在查询分析器得到的结果是符合预期的。
      

  4.   

    是的。在过程里可以简略成这样表达我的返回值DECLARE @RETURNVALUE INTSET @RETURNVALUE = 1RETURN @RETURNVALUE既然output参数可以返回,那我准备把所有的返回都设计成output参数,但是怎么都是0呢?请shakaqrj老兄再指教
      

  5.   

    connection连接了,实际代码中并不是用conn这个连接,而是一个封装在类里的连接m_conn,
    shakaqrj老兄,你在沙发给的那个链接的方法可用,我已调试通过,但是只是output可获取,return方式还是报错
    我现在把所有要返回的量都放在output里了,达到开发目的。只是为何不能用return方式,还是想不通盼继续指教
      

  6.   

    http://blog.csdn.net/handsomerun/archive/2007/07/28/1714598.aspx不知道对你有没有帮助,看一下