一、调用存储过程的步骤:
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"),
adChar,
adParamOutput,
10);
pCommand->Parameters->Append(outParam);
pCommand->Execute(NULL, NULL, adCmdStoredProc);
var = pCommand->Parameters->GetItem(_bstr_t("nDvdID"))->Value;
/*
有返回值时可以使用记录集对象来接收
_RecordsetPtr rec = pCommand->Execute(NULL, 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;
}
}