一、调用存储过程的步骤:
1、生成并初始化一个_CommandPtr对象;
2、生成调用存储过程需要的参数,这些参数都是_ParameterPtr对象;
3、按照顺序使用_CommandPtr的Append方法为存储过程提供参数(包括输入参数和输出参数);
4、为_CommandPtr对象指定需要使用的ADO连接;
5、使用_CommandPtr的Execute方法调用存储过程;
1、生成并初始化一个_CommandPtr对象;
2、生成调用存储过程需要的参数,这些参数都是_ParameterPtr对象;
3、按照顺序使用_CommandPtr的Append方法为存储过程提供参数(包括输入参数和输出参数);
4、为_CommandPtr对象指定需要使用的ADO连接;
5、使用_CommandPtr的Execute方法调用存储过程;
6、从结果中获取返回参数的值(如果有的话)。
二、实例:
1、使用PL/sql DEV新建一个存储过程如下(一个输入参数、一个输出参数):
create or replace procedure QueryDVDId ( strDvdName in varchar2,nDvdID out integer) is begin select SDVDID into nDvdID from tbdvdinfo where SDVDNAME = strDvdName; exception when no_data_found then dbms_output.put_line('1001001'); end QueryDVDId;
2、ADO对存储过程的调用:
int CRentMgrDlg::QueryDVDIdByProcedure(CString strDvdName) { _CommandPtr pCommand; pCommand.CreateInstance(__uuidof(Command)); _bstr_t Procedure("QueryDVDId"); _variant_t var; CString strValue; int nIdValue(-1); try { /*设置Command对象关联连接*/ pCommand->ActiveConnection = m_pConnection; /*指定命令为存储过程*/ pCommand->CommandText = Procedure; /**指定命令类型*/ pCommand->CommandType = adCmdStoredProc; //pCommand->Properties->Refresh(); //pCommand->Properties->GetItem("PLsqlRSet")->Value = true; /* CreateParameter函数原型:CreateParameter(Name,Type,Direction,Size,Value) 参数1:存储过程名称 参数2:参数类型 参数3:输入or输出参数 参数4:该参数值以字节计算的最大长度 参数5:该参数的取值 */ _ParameterPtr inParam = pCommand->CreateParameter(_bstr_t("strDvdName"),adChar,adParamInput,strDvdName.GetLength(),_variant_t(strDvdName)); pCommand->Parameters->Append(inParam); _ParameterPtr outParam = pCommand->CreateParameter(_bstr_t("nDvdID"),adParamOutput,10); pCommand->Parameters->Append(outParam); pCommand->Execute(NULL,NULL,adCmdStoredProc); var = pCommand->Parameters->GetItem(_bstr_t("nDvdID"))->Value; /* 有返回值时可以使用记录集对象来接收 _RecordsetPtr rec = pCommand->Execute(NULL,adCmdStoredProc); */ } catch(_com_error *e) { MessageBox(e->ErrorMessage()); return -1; } if(var.vt != VT_NULL) { strValue = (LPCSTR)_bstr_t(var); nIdValue = _ttoi(strValue); return nIdValue; }else{ return -1; } }