■■■VC调用SQL SERVER2000存储过程之后……■■■
步履人生 2007-09-20 12:56:44 如下:
--------------------------------------------------------------------------
// 我的 存储过程
Create Procedure upMyProc
@sMyID NVARCHAR(20),
@nCount int output
As
SELECT * FROM My_Table WHERE ID=@sMyID
SELECT @nCount=@@ROWCOUNT
RETURN @@ERROR
/////////////////////////////////////////////////
// 下面是我的VC调用代码
extern adoConn;
_bstr_t sql="upMyProc";
_CommandPtr pCommand(__uuidof(Command));
_ParameterPtr pParam(__uuidof(Parameter));
_RecordsetPtr pRecordset(__uuidof(Recordset));
pCommand=NULL;
pCommand.CreateInstance("ADODB.Command");
pRecordset.CreateInstance("ADODB.Recordset");
if(pCommand==NULL)
return TRUE;
pCommand->put_ActiveConnection(_variant_t((IDispatch*)adoConn.GetConnection()));
pCommand->CommandText=sql;
pCommand->CommandType=adCmdStoredProc;
CString sID="HX01-SH-NH-HSDX-061128-01";
int nRec;
_variant_t vpid,vk;
vid=_variant_t(_bstr_t(sID));
vk.vt=VT_I4;
vk.lVal=nRec;
pParam=pCommand->CreateParameter("sID",adVarChar,adParamInput,255,vid);
pCommand->Parameters->Append(pParam);
pParam=pCommand->CreateParameter("nRec",adInteger,adParamOutput,sizeof(int),vk);
pCommand->Parameters->Append(pParam);
_variant_t vNull;
vNull.vt=VT_ERROR;
vNull.scode=DISP_E_PARAMNOTFOUND;
pRecordset=pCommand->Execute(&vNull,&vNull,adCmdStoredProc); // 问题出处★★★
_variant_t v;
v=pCommand->Parameters->GetItem(_variant_t("nRec"))->GetValue();
nRec=v.lVal ;
if(nRec>0)
{
// 取回返回值
pRecordset->MoveFirst();
_variant_t ss;
pRecordset->GetCollect("ID",ss);
}
-----------------------------------------------------------------------
我的问题:
如果我在“问题出处★★★”这行使用上面的代码就得不到v的值,总是显示VT_EMPTY,并且pRecordset->MoveFirst()也会报错;
但如果我将“问题出处★★★”这行代码换为如下:
pCommand->Execute(&vNull,&vNull,adCmdStoredProc);
也就是不把所检索的记录集赋值到pRecordset,v值就可以得到并且是正确的。
但是我是想既得到v值又想将检索的记录集赋值到pRecordset方便我逐条记录得查询啊,不知道是怎么回事,希望大家帮忙。