CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  数据库

各位朋友,请问有人用C++ ODBC API来写过可以支持SQL存储过程的模块吗?请进来帮帮我啊!谢谢

楼主hsz8250(terry)2005-01-12 17:48:17 在 VC/MFC / 数据库 提问

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

1 楼bohut(●伯虎● )回复于 2005-01-13 08:43:18 得分 50

在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  
  Top

2 楼hsz8250(terry)回复于 2005-01-13 09:24:38 得分 0

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

3 楼hsz8250(terry)回复于 2005-01-13 09:25:33 得分 0

那请问是不是一个存储过程都要当一个特例来做?Top

相关问题

  • C高手请进来。
  • 高手请进来!!!C#
  • C++高手请进来呀!
  • 是C++高手的请进来指点!
  • 看过 Effective C++ 的请进来哦
  • 两个T-SQL问题,请进来坐坐===>
  • C/C++的各位朋友,请进来捧场
  • 在Linux下 C/C++ 编程的请进来
  • 在C#中用SqlDataAdapter利用存储过程更新SQL数据库的一个问题?详情请进来看!急!
  • 让我心碎的C++Builder,自认会用BCB的请进来。

关键词

  • c++
  • 存储过程
  • sql
  • 请问
  • para
  • pdatabase
  • 参数
  • crecordset
  • 知道
  • rs

得分解答快速导航

  • 帖主:hsz8250
  • bohut

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo