ADO:CommandPtr对象调用oracle中的存储过程

一、调用存储过程的步骤:
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;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值