紧急求助,用ADO,_CommandPtr和_RecordsetPtr调用存储过程的问题.在线等待.
f_d_0 2007-07-15 11:00:09 下面是用ADO调用存储过程的代码片段,不知为什么执行到exexute这个函数的时候就报错,请高手帮忙看一下,不胜感激.
_CommandPtr comm;
_RecordsetPtr rs;
HRESULT hr = comm.CreateInstance(__uuidof(Command));
if(FAILED(hr))
return -1;
comm->Parameters->Append(comm->CreateParameter("@Type",
adInteger,adParamInput,4,(long)Type));
comm->Parameters->Append(comm->CreateParameter("@ProId",
adInteger,adParamInput,4,(long)proId));
comm->Parameters->Append(comm->CreateParameter("@Date",
adVarChar,adParamInput,10,_variant_t(dateString)));
comm->Parameters->Append(comm->CreateParameter("@Time",
adVarChar,adParamInput,10,_variant_t(timeString)));
comm->Parameters->Append(comm->CreateParameter("@PType",
adInteger,adParamInput,4,(long)pType));
comm->Parameters->Append(comm->CreateParameter("@Org",
adInteger,adParamInput,4,(long)org));
comm->Parameters->Append(comm->CreateParameter("@Dtn",
adInteger,adParamInput,4,(long)dtn));
comm->Parameters->Append(comm->CreateParameter("@FareValue",
adInteger,adParamOutput,4,(long)fare));
comm->CommandText = _bstr_t("spComputePrice");
comm->ActiveConnection = DBLink->GetConnection();//返回正确的数据库连接
comm->CommandType = adCmdStoredProc;
comm->Execute(NULL,NULL,adCmdStoredProc);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~执行到这里就报错了.
fare = comm->Parameters->GetItem("FareValue")->GetValue();
然后我就准备采用第二种方法,用_RecordsetPtr
下面是用SQL语句执行存储过程的代码片段,执行能成功,但是不知道怎么取得输出参数和返回的结果呢?请高手指教
CString sSQL;
_RecordsetPtr m_pRecordset;
sSQL.Format("declare @Type int\
declare @ProId int\
declare @Day varchar(10)\
declare @Time varchar(10)\
declare @PType int\
declare @Org int\
declare @Dtn int\
declare @FareValue int\
set @Type=%d\
set @ProId=%d\
set @Day='%s'\
set @Time='%s '\
set @PType=%d\
set @Org=%d\
set @Dtn=%d\
set @FareValue=%d\
exec spComputePrice\
@Type,@ProId,\
@Day,@Time,@PType,\
@Org,@Dtn,@FareValue output",\
iType,proId,dateString,
timeString,pType,org,dtn,fare);
HRESULT hr;
try
{
if(m_pRecordset->State)
m_pRecordset->Close();
m_pRecordset->CursorLocation = adUseServer;
hr = m_pRecordset->Open(_bstr_t(strSQL),
_variant_t((IDispatch*)m_pConnection, true),
adOpenStatic, adLockOptimistic, adCmdText);
if( FAILED(hr) )
{
OutMsg("Open Recordset Error!");
return NULL;
}
}
catch(_com_error &e)
{
OutMsg(e.ErrorMessage());
OutMsg( LPCTSTR(e.Description()) );
return NULL;
}
fare = m_pRecordset->Fields->GetItem(_variant_t((long)0))->Value;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~这里报错,去不到存储过程返回的结果.
请教高手这上面的两个问题怎么解决.我殷切期待.谢谢.