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

前端之家收集整理的这篇文章主要介绍了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"),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;
	}
}

猜你在找的Oracle相关文章