欢迎来到天天文库
浏览记录
ID:37903530
大小:36.00 KB
页数:5页
时间:2019-06-02
《VC调用存储过程的通用方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、VC调用存储过程的通用方法(SQLServer篇)开发者在线Builder.com.cn更新时间:2008-03-28作者:临风来源:CSDN本文关键词:sqlserver调用vc数据库这里讨论的是ADO调用存储过程,按MSDN的例子,一般都是下面的调用方法(节选自MSDN):HRESULThr=S_OK; //DefineADOobjectpointers. //Initializepointersondefine. //TheseareintheADODB:: namespace. _RecordsetPtrpRstByRoyalty=NULL; _RecordsetP
2、trpRstAuthors=NULL; _CommandPtr pcmdByRoyalty=NULL; _ParameterPtrpprmByRoyalty=NULL; _ConnectionPtrpConnection=NULL; _bstr_tstrCnn("Provider=sqloledb;DataSource=srv;" "InitialCatalog=Pubs;UserId=sa;Password=;"); _bstr_tstrMessage,strAuthorID; intintRoyalty; VARIANTvtRoyalty;
3、try { //OpenaConnection. TESTHR(pConnection.CreateInstance(__uuidof(Connection))); hr=pConnection->Open(strCnn,"","",NULL); pConnection->CursorLocation=adUseClient; //OpenCommandObjectwithoneParameter TESTHR(pcmdByRoyalty.CreateInstance(__uuidof(Command)));
4、 pcmdByRoyalty->CommandText="byroyalty"; pcmdByRoyalty->CommandType=adCmdStoredProc; //DefineInteger/variant. vtRoyalty.vt=VT_I2; vtRoyalty.iVal=intRoyalty; pprmByRoyalty=pcmdByRoyalty->CreateParameter( "percentage",adInteger,adParamInput,sizeof(int),vtRoyalt
5、y); pcmdByRoyalty->Parameters->Append(pprmByRoyalty); pprmByRoyalty->Value =vtRoyalty; //CreateRecordsetbyexecutingthecommand pcmdByRoyalty->ActiveConnection=pConnection; pRstByRoyalty=pcmdByRoyalty->Execute( NULL,NULL,adCmdStoredProc); //执行结果的处理,省略...
6、 pRstByRoyalty->Close(); pRstAuthors->Close(); pConnection->Close(); } catch(_com_error&e) { //意外处理... }}必须指定执行SQL语句的CommandType是adCmdStoredProc,存储过程有参数就必须CreateParameter生成参数,这样调用存储过程就成了很麻烦的一件事情,必须针对不同的存储过程生成不同的参数。一个两个还可以接受,如果项目的业务逻辑比较复杂,需要依赖大量的存储过程,并且项目的需求或功能可能要经常变动或扩展,
7、那就成了一个噩梦了。有没有通用的方法呢?当然有,只需要通用的查询就可以实现。_ConnectionPtrpConnection=NULL;m_Conn.CreateInstance(__uuidof(Connection));m_Conn->ConnectionString="Provider=sqloledb;DataSource=srv;"InitialCatalog=Pubs;UserId=
此文档下载收益归作者所有