-

- 加为好友
- 发送私信
- 在线聊天
-
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
修改
删除
举报
引用
回复
| |