vc ado 调用sqlserver存储过程,如何取最后一个结果集 ,请大虾们帮忙,多谢!! 存储过程中 利用游标取出多个SELECT 结果集,结果集数目不定,vc程序只需要最后一个结果集 ,不是知道 ado 的 recordset 对象如何只取最后一个结果集,或者是 如何让存储过程 只返回最后一个select 结果集? 请高手解救? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先确定几个问题,你的存储过程如何返回记录集1.在存储过程中的出口是1条或多条select ....语句,且中间没有return语句2.使用了输出参数为游标的存储过程 如果存储过程只返回一个记录集那么在存储过程的出口只能有一条独立的select语句,且之前后之后不能有return或者print while( NULL != res ) { //记录集打开 if(res->GetState() == ADODB::adStateOpen) { //有数据 //return ( VARIANT_FALSE==res->GetIsEOF() ); return TRUE; //是否有记录由调用者负责 2006-9-14 } //下一个记录集 res = res->NextRecordset(NULL); } 是多条select ....语句,且中间没有return语句 if(FAILED(::CoInitialize(NULL))) return; try{//定义connection, recordset,command对象 _ConnectionPtr pConn = NULL ; _RecordsetPtr pRs = NULL ; _RecordsetPtr pRs2 = NULL ; _CommandPtr comm = NULL ; _ParameterPtr param =NULL ; HRESULT hr = S_OK; _bstr_t strCnn("Driver={SQL Server};Server=(local);Uid=sa;Pwd=;DataBase=test"); pConn.CreateInstance(__uuidof(Connection)); pConn->CursorLocation =adUseClient; pConn->ConnectionTimeout =60; comm.CreateInstance(__uuidof(Command)); param.CreateInstance(__uuidof(Parameter)); //pRs.CreateInstance(__uuidof(Recordset)); pConn->Open (_bstr_t(strCnn),_bstr_t(""),_bstr_t(""),adModeUnknown); comm->ActiveConnection=pConn; comm->CommandType=adCmdStoredProc; comm->CommandText="proc_test"; //param = comm->CreateParameter ("@ID",adInteger,adParamInput,9,lpsub->id); //comm->Parameters->Append(param); //param = comm->CreateParameter ("@issuccess",adVarChar,adParamInput,8,bisSuccess); //comm->Parameters->Append(param); //param = comm->CreateParameter ("@ErrCode",adVarChar,adParamInput,10,bErrCode ); //comm->Parameters->Append(param); //运行存储过程,得到pRs记录集包含多个记录集,存储过程proc_test,select 2个表,返回了2个记录集 pRs=comm->Execute(NULL,NULL,adCmdStoredProc);//第一个记录集的遍历 for(int i=0;!pRs->EndOfFile;pRs->MoveNext(),i++) { _variant_t vExp1; vExp1=pRs->Fields->Item["exp1"]->Value; TRACE("%d:%s\n",i,(LPCTSTR)(_bstr_t)vExp1); } //得到第二个记录集,pRs2 _variant_t vta=0; pRs2=pRs->NextRecordset(&vta);//第二个记录集遍历 for(int i=0;!pRs2->EndOfFile;pRs2->MoveNext(),i++) { _variant_t vExp1; vExp1=pRs2->Fields->Item["exp1"]->Value; TRACE("%d:%s\n",i,(LPCTSTR)(_bstr_t)vExp1); }//关闭所有打开的对象 if (pRs) if (pRs->State == adStateOpen) pRs->Close(); if (pRs2) if (pRs2->State == adStateOpen) pRs2->Close(); if (pConn) if (pConn->State == adStateOpen) pConn->Close();}catch (_com_error pCome){ TRACE("Error info: %s \n", (LPCTSTR)(pCome.Description()));}::CoUninitialize(); C++调用java编写的webservice问题 线程挂不起来 这是真的吗? 求教:在包含库文件时出现的一个十分奇怪的问题??? 如何控制edit控件中的文字为选中状态,也就是文字是蓝底白字,被选中? CListView使用的基础问题,在线等待 各位,推荐VB写COM的书籍!高分了! oicq当好友上线时,在任务栏里跳出某某上线了的消息,这个效果是如何做呢?????? 菜单里查看->工具栏中“工具栏 ”前的钩是怎么做的?? 关于电子版本的《深入浅出mfc》,一定要帮帮我。。。 为什么一个行另一个不行呢?关于SPI IP地址更改 关于VC7.0的一个问题!
那么在存储过程的出口只能有一条独立的select语句,且之前后之后不能有return或者print
{
//记录集打开
if(res->GetState() == ADODB::adStateOpen)
{
//有数据
//return ( VARIANT_FALSE==res->GetIsEOF() );
return TRUE; //是否有记录由调用者负责 2006-9-14
}
//下一个记录集
res = res->NextRecordset(NULL);
}
return;
try
{//定义connection, recordset,command对象
_ConnectionPtr pConn = NULL ;
_RecordsetPtr pRs = NULL ;
_RecordsetPtr pRs2 = NULL ;
_CommandPtr comm = NULL ;
_ParameterPtr param =NULL ;
HRESULT hr = S_OK;
_bstr_t strCnn("Driver={SQL Server};Server=(local);Uid=sa;Pwd=;DataBase=test"); pConn.CreateInstance(__uuidof(Connection));
pConn->CursorLocation =adUseClient;
pConn->ConnectionTimeout =60;
comm.CreateInstance(__uuidof(Command));
param.CreateInstance(__uuidof(Parameter));
//pRs.CreateInstance(__uuidof(Recordset)); pConn->Open (_bstr_t(strCnn),_bstr_t(""),_bstr_t(""),adModeUnknown);
comm->ActiveConnection=pConn;
comm->CommandType=adCmdStoredProc;
comm->CommandText="proc_test";
//param = comm->CreateParameter ("@ID",adInteger,adParamInput,9,lpsub->id);
//comm->Parameters->Append(param);
//param = comm->CreateParameter ("@issuccess",adVarChar,adParamInput,8,bisSuccess);
//comm->Parameters->Append(param);
//param = comm->CreateParameter ("@ErrCode",adVarChar,adParamInput,10,bErrCode );
//comm->Parameters->Append(param);
//运行存储过程,得到pRs记录集包含多个记录集,存储过程proc_test,select 2个表,返回了2个记录集
pRs=comm->Execute(NULL,NULL,adCmdStoredProc);
//第一个记录集的遍历
for(int i=0;!pRs->EndOfFile;pRs->MoveNext(),i++)
{
_variant_t vExp1;
vExp1=pRs->Fields->Item["exp1"]->Value; TRACE("%d:%s\n",i,(LPCTSTR)(_bstr_t)vExp1);
}
//得到第二个记录集,pRs2
_variant_t vta=0;
pRs2=pRs->NextRecordset(&vta);
//第二个记录集遍历
for(int i=0;!pRs2->EndOfFile;pRs2->MoveNext(),i++)
{
_variant_t vExp1;
vExp1=pRs2->Fields->Item["exp1"]->Value;
TRACE("%d:%s\n",i,(LPCTSTR)(_bstr_t)vExp1);
}
//关闭所有打开的对象
if (pRs)
if (pRs->State == adStateOpen)
pRs->Close();
if (pRs2)
if (pRs2->State == adStateOpen)
pRs2->Close();
if (pConn)
if (pConn->State == adStateOpen)
pConn->Close();
}
catch (_com_error pCome)
{
TRACE("Error info: %s \n", (LPCTSTR)(pCome.Description()));}
::CoUninitialize();