加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 13:59:18 所属栏目:百科 来源:网络整理
导读:一、调用存储过程的步骤: 1、生成并初始化一个_CommandPtr对象; 2、生成调用存储过程需要的参数,这些参数都是_ParameterPtr对象; 3、按照顺序使用_CommandPtr的Append方法为存储过程提供参数(包括输入参数和输出参数); 4、为_CommandPtr对象指定需要
一、调用存储过程的步骤:
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;
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读