大师好,近日刚刚接触VC调用存储过程这快,基本属于很蒙胧的状态,如下是我写的代码
         
         CString v_return;
CString v_text;
CString tmp; 
_ParameterPtr   param;  

                 param   =   m_pComm->CreateParameter("YYCXBBH",adVarChar,   adParamInput,64,_variant_t("2.0"));       
                 m_pComm->Parameters->Append(param);//为_CommandPtr添加参数
                    param   =   m_pComm->CreateParameter("DQQSRQ",adVarChar,adParamInput,64,_variant_t("2008"));       

 m_pComm->Parameters->Append(param); 
 param   =   m_pComm->CreateParameter("BL",adVarChar,adParamInput,64,_variant_t("YY"));       
 
                          param   =   m_pComm->CreateParameter("",adVarChar,adParamOutput,4);
  param   =   m_pComm->CreateParameter("",adVarChar,adParamOutput,64);       
 m_pComm->CommandText=_bstr_t("CS");//存储过程的名称       
 m_pComm->ActiveConnection   =   m_pConn;//需要使用的ADO连接       
 m_pComm->CommandType=adCmdStoredProc;       
 m_pComm->Execute(NULL,   NULL,   adCmdStoredProc);               v_return  = (CString)m_pComm->Parameters->GetItem("p_return")->GetValue();
             v_text =(CString)m_pComm->Parameters->GetItem("p_text")->GetValue();//通过参数返回值,但提示数据类型错误      
               AfxMessageBox(v_text);初学乍练,让大师见笑了,在此先谢谢了

解决方案 »

  1.   

    哪里报的数据类型错误? 哪一行?
    出的COM异常吗?
      

  2.   

    就是这个cannot convert from 'class _variant_t' to 'class CString'
      

  3.   

    v_return  = (LPCSTR)_bstr_t(m_pComm->Parameters->GetItem("p_return")->GetValue()); 
                 v_text =(LPCSTR)_bstr_t(m_pComm->Parameters->GetItem("p_text")->GetValue());//通过参数返回值,但提示数据类型错
      

  4.   

    楼上正解! 使用(LPCTSTR)_bstr_t(...)转一下
      

  5.   

    不知道是哪句出问题
    用try{}catch(_com_error e){messagebox(e.description());}
      

  6.   

     'description' : is not a member of '_com_error'
    see declaration of '_com_error'用了try{}catch{}后编译有这样的错误
    不好意思啊
      

  7.   

    Description()
    你的编译器没自动提示??
      

  8.   

    try
    {
             ...
    }
    catch(_com_error& e)
    {
    // 获取错误代码
    CString  strMsg;
    strMsg.Format(_T("(0x%08x) %s"), e.Error(), e.Description());
            AfxMessageBox(strMsg);
    }
      

  9.   

    错误出来了,第一行第7列,调用‘CS’时参数个数或类型错误传入的字段     数据类型
    YYCXBBH      VARCHAR2
    DQQSRQ       CHAR
    BL           VARCHAR2返回字段       数据类型
    QQID         NUMBER    大概是这快地方错了
      

  10.   

    还有一个返回的  PROCCODE   类型是 NUMBER     
      

  11.   

    adChar 
     129 指示一个字符串值 (DBTYPE_STR)。 m_pComm->CreateParameter("DQQSRQ",adVarChar
    DQQSRQ       CHAR
      

  12.   

    存储过程如下:
    REATE OR REPLACE PROCEDURE CS
       ( YHT_YYCXBBH      IN  VARCHAR2,       --应用程序版本号
         YHT_DQQSRQ       IN  CHAR,           --当前清算日期
         YHT_BL           IN  VARCHAR2,       --保留
         RETCODE          OUT NUMBER,
         RETMSG           OUT VARCHAR2)
       IS
        U_PROCCODE NUMBER(8);
        U_QQID     NUMBER(12);
    BEGIN
        ------------------------------------------------------------------取得副表ID
        SELECT SID_YW_CSQQ.NEXTVAL
        INTO U_QQID
        FROM DUAL;
        ----------------------------------------------------------------------------
        BEGIN
          ----------------------------------------------------新增网络测试请求表记录
          INSERT INTO YW_CSQQ(QQID,YYCXBBH,DQQSRQ,BL)
          VALUES(U_QQID,YHT_YYCXBBH,YHT_DQQSRQ,YHT_BL);
          --------------------------------------------------------------返回成功标志
          COMMIT;
          RETCODE:=1;
          RETMSG:='操作成功';
        EXCEPTION
          WHEN OTHERS THEN
            ROLLBACK;
            RETCODE:=SQLCODE;
            RETMSG:=SQLERRM;
        END;
    END; -- Procedure
      

  13.   

    m_pComm->CreateParameter("DQQSRQ",adChar 
      

  14.   

    我改过了已经
    param = m_pComm->CreateParameter("YHT_DQQSRQ",adChar,adParamInput,64,_variant_t("2008"));  
      

  15.   

    我改了一些原来不对的地方,但是还是报同样的错
    try
    {
    param = m_pComm->CreateParameter("YHT_YYCXBBH",adVarChar,adParamInput,64,_variant_t("2"));       

    m_pComm->Parameters->Append(param);                          //为_CommandPtr添加参数
    param = m_pComm->CreateParameter("YHT_DQQSRQ",adChar,adParamInput,64,_variant_t("2008"));       

    m_pComm->Parameters->Append(param); 
    param = m_pComm->CreateParameter("YHT_BL",adVarChar,adParamInput,64,_variant_t("YY"));       

    param = m_pComm->CreateParameter("RETCODE",adInteger,adParamOutput,4);
    param = m_pComm->CreateParameter("RETMSG",adVarChar,adParamOutput,64);       
    m_pComm->CommandText=_bstr_t("CS");                      //存储过程的名称       
    m_pComm->ActiveConnection=m_pConn;                      //需要使用的ADO连接       
    m_pComm->CommandType=adCmdStoredProc;       
    m_pComm->Execute(NULL,NULL,adCmdStoredProc);  

    v_return  = (LPCSTR)_bstr_t(m_pComm->Parameters->GetItem("QQID")->GetValue());  
    v_text =(LPCSTR)_bstr_t(m_pComm->Parameters->GetItem("PROCCODE")->GetValue());//       
    AfxMessageBox(v_return);
    }
    catch(_com_error e)
    {   
    MessageBox(e.Description());
    }   
      

  16.   

    很好很强大,搞定了  只要这样就可以了
    param = m_pComm->CreateParameter("YHT_YYCXBBH",adVarChar,adParamInput,64,_variant_t("3"));       
    m_pComm->Parameters->Append(param); 
                             //为_CommandPtr添加参数
    param = m_pComm->CreateParameter("YHT_DQQSRQ",adChar,adParamInput,64,_variant_t("2009"));       
    m_pComm->Parameters->Append(param);
     
    param = m_pComm->CreateParameter("YHT_BL",adVarChar,adParamInput,64,_variant_t("ww"));       
    m_pComm->Parameters->Append(param);
     
    param = m_pComm->CreateParameter("RETCODE",adInteger,adParamOutput,4);
    m_pComm->Parameters->Append(param);
     
    param = m_pComm->CreateParameter("RETMSG",adVarChar,adParamOutput,64);       
    m_pComm->Parameters->Append(param);