写SQL存储过程,首先要知道有那个输入参数,那个输出参数,那个是输入输入参数,还有存储过程中怎样知道有多少个参数,请问怎样可以知道呢?
还有如果知道了这些内容请问又怎样去使用和绑定呢?
谢谢!如果有那位朋友是写过类似的C++代码类,请贴一小部分代码出来看看啊!本人万分感激!

解决方案 »

  1.   

    在vc中通过ODBC(不要ADO)调用  
    CREATE  PROCEDURE  Test  
    @Para1  int  ,  
    @Para2  int  ,  
    @Para3  int  ,  
    @Ret  int  OUTPUT  
     AS  
    insert  into  test1  values  (@Para1,@Para2,@Para3)  
    set  @Ret  =  @Para1;  
    GO  
    ///////////////////////////////////////////////////////////////////////////////  
    jnxulei(石头)  (  )  信誉:111    
    //------------------------------------------------------------------------------  
               CDatabase  *  pDatabase  =  new  CDatabase;  
     
                     pDatabase->OpenEx("DSN=ODBCName;UID=***;PWD=***",  0  );  
             
                     CRecordset  rs(  pDatabase  );  
     
               SQL.Format("{Test  %d,%d,%d,%d}",Time0,  Time1,  Time2,  Time3);  
     
                     rs.Open(  CRecordset::dynamic,  SQL,  CRecordset::none  );  
     
                     rs.GetFieldValue(  (long)0,  strReturn  );  
     
                     rs.Close();  
     
               pDatabase->Close();  
               delete  pDatabase;  
    ///////////////////////////////////////////////////////////////////////////////  
    lsp5i5j(星辰->女人在哪)  (  )  信誉:87    
    //------------------------------------------------------------------------------  
    ODBC有点麻烦,输入输出参数都有  
    int  SimpleGetAccordOtherprocedure(CDatabase  *dbCust,char  *spstring,char  *resultp,int  *resultplen,int  *ireturn,int  *nIndex,char  *sUserTel,char  *sOtherId,char  *sOtherTel,char  *sOtherSex,char  *sOtherOld)  
    {  
               char            spstm[512];  
               int            ret;  
               HSTMT            hStmt;  
               int                        totallen=0;  
               SDWORD            cbIn1=SQL_NTS,  cbIn2=SQL_NTS,  cbOut=1024,cbRet=0;  
     
               ret=SQLAllocStmt(dbCust->m_hdbc,  &hStmt);  
               if(ret!=SQL_SUCCESS  &&  ret!=SQL_SUCCESS_WITH_INFO)  
                           return(-3503);              
     
               if(sizeof(spstm)<=strlen(spstring))  
                           return(-3504);  
               strcpy(spstm,spstring);  
               ret=SQLPrepare(hStmt,  (UCHAR  *)spstm,  SQL_NTS);  
               if(ret!=SQL_SUCCESS  &&  ret!=SQL_SUCCESS_WITH_INFO)  
                           return(-3504);  
     
               ret=SQLBindParameter(hStmt,1,SQL_PARAM_OUTPUT,SQL_C_SSHORT,SQL_INTEGER,  0,  0,  ireturn,  0,&cbRet);  
               ret=SQLBindParameter(hStmt,2,SQL_PARAM_INPUT,SQL_C_SSHORT,SQL_INTEGER,0,  0,  nIndex,  0,  &cbIn1);  
               ret=SQLBindParameter(hStmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,  DBACCESS_MAXPARAMLEN,  0,  sUserTel,  DBACCESS_MAXPARAMLEN,&cbIn1);  
               ret=SQLBindParameter(hStmt,4,SQL_PARAM_OUTPUT,SQL_C_CHAR,SQL_CHAR,  DBACCESS_MAXPARAMLEN,  0,  sOtherId,  DBACCESS_MAXPARAMLEN,&cbIn2);  
               ret=SQLBindParameter(hStmt,5,SQL_PARAM_OUTPUT,SQL_C_CHAR,SQL_CHAR,  DBACCESS_MAXPARAMLEN,  0,  sOtherTel,  DBACCESS_MAXPARAMLEN,&cbIn1);  
               ret=SQLBindParameter(hStmt,6,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,  DBACCESS_MAXPARAMLEN,  0,  sOtherSex,  DBACCESS_MAXPARAMLEN,&cbIn1);  
               ret=SQLBindParameter(hStmt,7,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,  DBACCESS_MAXPARAMLEN,  0,  sOtherOld,  DBACCESS_MAXPARAMLEN,&cbIn1);  
     
               ret=SQLExecute(hStmt);  
     
               if(ret!=SQL_SUCCESS  &&  ret!=SQL_SUCCESS_WITH_INFO)  
                           return(-3505);                                                                                                                                                //  printf("Error  in  execute!\n");  
           ret=TBSDBProcWU(hStmt,resultp,resultplen);  
           return  ret;  
    }  
     
    参考:  
    ---------------------------------------------------------------  
     
    http://www.vchelp.net/wyy/tour/odbc_api.asp#_Toc50053547  
    ---------------------------------------------------------------  
     
    http://tech.ccidnet.com/pub/article/c1060_a58457_p1.html  
    :p
      

  2.   

    谢谢你的回复!但是如果我有很多的存储过程,大多数的都不是参数相同的,那请问怎么办呢?很难用一个方法或一个CLASS来包装起来!那该怎样办呢?谢谢!