首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • vc中如何用ADO方式创建存储过程?
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • eyoule
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-19 10:19:11 楼主
    在网上查到一个例子但是发现存放存储过程的字符串bstrcreate没有调用到呀
    //  sql  server,  stored  procedure  ,  command  ,  recordset,  input  parameter,  output  parameter,  returned  recordset  from  stored  procedure 
      //execute  stored  procedure  ,  get  returned  value,  output  value,  and  returned  recordset. 
      #include  "stdafx.h" 
      #import  "c:\progra~1\common~1\system\ado\msado15.dll"  rename(  "eof",  "adoeof"  ) 
          struct  initole 
          { 
              initole()    {  ::coinitialize(null);  } 
              ~initole()  {  ::couninitialize();    } 
          }  _init_initole_; 
      void  printprovidererror(adodb::_connectionptr  pconnection); 
       
      int  main(int  argc,  char*  argv[]) 
      { 
                      printf("create  a  adparamreturnvalue  for  command  object  to  get  return  value  of  stored  procedure\n"); 
                      printf("reference  :msdn---append  and  createparameter  methods  example  (vc++)\n"); 
                      adodb::_connectionptr    conn1; 
                      adodb::_commandptr        cmd1; 
                      adodb::_recordsetptr    rs1; 
                      adodb::_parameterptr    retparam=  null; 
                      adodb::_parameterptr  inparam=null; 
                      adodb::_parameterptr  outparam=null; 
                      _variant_t    vtempty  (disp_e_paramnotfound,  vt_error); 
                      _variant_t    vtempty2  (disp_e_paramnotfound,  vt_error); 
                      _bstr_t        bstrconnect(  l"driver={sql  server};server=cell;database=zhg;uid=sa;pwd=;"  ); 
                      //  the  following  stored  procedure  return  12345  int  value 
                      _bstr_t        bstrcreate  (  l"create  proc  sp_adotest(  @outparam  int  output,@inparam  int  )  " 
                                      l"as  " 
                                      l"select  @outparam  =  @inparam  +  10  " 
                                      l"select  *  from  table1" 
                                      l"return  12345"  ); 
                      _bstr_t        bstrsp(l"sp_adotest"  ); 
                      try 
                      { 
                                      _bstr_t  bstrempty; 
                                      conn1.createinstance(  __uuidof(  adodb::connection  )  ); 
                                      cmd1.createinstance(  __uuidof(  adodb::command  )  ); 
                                      rs1.createinstance(__uuidof(adodb::recordset)); 
                                      //  establish  connection. 
                                      conn1->connectionstring  =  bstrconnect; 
                                      conn1->open(  bstrconnect,  bstrempty,  bstrempty,  -1  ); 
                                      //  open  recordset. 
                                      cmd1->activeconnection  =  conn1; 
                                      cmd1->commandtext            =  bstrsp; 
                                      cmd1->commandtype            =  adodb::adcmdstoredproc; 
                                      retparam=cmd1->createparameter(_bstr_t("return"),adodb::adinteger,adodb::adparamreturnvalue,sizeof(int)); 
                                      cmd1->parameters->append(retparam); 
                                      outparam  =  cmd1->createparameter(_bstr_t("outparam"),adodb::adinteger,adodb::adparamoutput,sizeof(int)); 
                                      cmd1->parameters->append(outparam); 
                                      inparam  =  cmd1->createparameter(_bstr_t("inparam"),adodb::adinteger,adodb::adparaminput,sizeof(int),_variant_t(  (long)  10  )); 
                                      inparam->value=_variant_t(  (long)  10  ); 
                                      cmd1->parameters->append(inparam); 
                                      cmd1->parameters->refresh(); 
                                      cmd1->parameters->item[  _variant_t(  _bstr_t("@inparam")  )  ]->value  =_variant_t(  (long)  11  ); 
                                      rs1->put_cursorlocation(adodb::aduseclient); 
                                      rs1->open((_variant_t((idispatch  *)  cmd1)),vtempty,adodb::adopenstatic, 
                                                      adodb::adlockreadonly,  -1); 
                                      //  get  return  value  of  the  stored  procedure.adcmdunknown 
                                      tchar  tcbuf[1024]; 
                                      long  retvalue=cmd1->parameters->item[(short)0]->value; 
                                      long  p2=cmd1->parameters->item[(short)1]->value; 
                                      long  p3=cmd1->parameters->item[(short)2]->value; 
                                      int  recordcount=0; 
                                      if(rs1->state==adodb::adstateclosed) 
                                                      messagebox(null,"no  recordset  is  returned  from  the  stored  procedure","information",mb_ok); 
                                      else 
                                                      recordcount  =  rs1->getrecordcount(); 
                                      wsprintf(tcbuf,"retvalue  of  the  stored  procedure:%d,input  value:%d,output  value:%d,record  count  :%d",retvalue,p2,p3,recordcount); 
                                      messagebox(null,tcbuf,"output",mb_ok); 
                      } 
          catch(_com_error  &e) 
          { 
                  _bstr_t  bstrsource(e.source()); 
                  _bstr_t  bstrdescription(e.description()); 
                  printf("\ncom  error  occurred,  source  :  %s  \n  description  :  %s  \n",(lpcstr)bstrsource,(lpcstr)bstrdescription); 
              printprovidererror(conn1); 
          } 
                      return  0; 
      } 
      void  printprovidererror(adodb::_connectionptr  pconnection) 
      { 
          //  print  provider  errors  from  connection  object. 
          //  perr  is  a  record  object  in  the  connections  error  collection. 
                      adodb::errorptr    perr  =  null; 
          long            ncount  =  0; 
          long            i  =  0; 
       
          if(  (pconnection->errors->count)  >  0) 
          { 
                  ncount  =  pconnection->errors->count; 
                  //  collection  ranges  from  0  to  ncount  -1. 
                  for(i  =  0;  i  <  ncount;  i++) 
                  { 
                      perr  =  pconnection->errors->getitem(i); 
                      printf("\n\t  error  number:  %x\t%s",  perr->number,  (lpcstr)perr->description); 
                  } 
          } 
      }

    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • arrow_gx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 11:10:211楼 得分:0
    用动态 sql 语句

    把建立存储过程的SQL 语句组合成一个变量(sql批语句),然后直接运行
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zjcxc
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-20 11:15:002楼 得分:0
    创建存储过程用类似下面的 T-SQL 语句, 执行这个 T-SQL 语句和执行 select 查询类似, 没有什么特别的
    SQL code
    create proc 存储过程名 as ....存储过程内容
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-08-20 11:20:583楼 得分:0
    cmd1->commandtext            =  bstrsp; 


    ---

    这不是吗
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • arrow_gx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 11:29:394楼 得分:0
    补充一下,换行的地方,用 ; (分号) 隔开,这样组织语句的时候,逻辑上比较容易实现
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved