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;
	}
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012372584/article/details/79970363
个人分类: 数据库编程
上一篇ADO:使用事务操作Oracle数据库
下一篇Vs2010+QT 4.8.6 的环境配置
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭