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

2人阅读 评论(0) 收藏 举报
分类:
一、调用存储过程的步骤:
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;
	}
}


查看评论

细细品味ASP.NET (二)

细细品味ASP.NET (二)青苹果工作室(编译) 01-5-17 下午 01:33:55Web表单 ASP.NET Web Forms就是Web页面,同现在你用 ASP编写代码所做的工作是一样的。...
  • tchaikov
  • tchaikov
  • 2001-05-17 18:50:00
  • 982

MFC---ADO 调用存储过程

界面: 存储过程:/* 话务统计信息查询。通过用户选定的小区(cellid),开始时间(startTime), 结束时间(endTime), 计算得到小时级话务量(avgTraff),小时级拥塞率(...
  • u012319493
  • u012319493
  • 2016-01-20 20:41:16
  • 1204

ADO.NET(五) 调用存储过程(oracle为例)

存储过程是保存在数据库上的批次执行的一条或者多条SQL语句,存储过程和函数相似,他们都是良好的逻辑封装体 可以接受传入和传出参数,存储过程有很多优点。 1、更易于维护 你可以优化存储过程中的命令而不用...
  • u010586842
  • u010586842
  • 2013-11-24 21:02:41
  • 1789

VC ADO调用存储过程

  • 2012年03月22日 09:06
  • 22KB
  • 下载

关于存储过程的ADO调用的一些心得(输出参数,返回值)

在一个项目中,我需要用到存储过程来访问数据,为了提供一个比较一致的接口以便调用,我没有使用CreateParameter(),而是调用CommandPtr的Refresh()函数先从数据库中查询参数....
  • Willin
  • Willin
  • 2004-12-21 13:49:00
  • 3752

ADO连接oracle数据库,并调用带参数的存储过程

这两天要写一个与oracle存储过程相关的测试程序,可恨自己对着一无所知,探索两天终于出来了,记录之,备以后留用。啦啦啦啦~~~~ first:连接oracle数据库。 工具:oracle 11g 环...
  • so_so_jiang
  • so_so_jiang
  • 2013-07-26 17:02:50
  • 1250

ADO教程(执行带参数存储过程)

由于最近项目上要使用ADO访问数据库,而网上又没有非常完整的帖子,干脆摸着石头过河来总结一个ADO的使用;首先不得不说ADO的使用率并不是很高 1.ADO是微软提供的访问各种数据库的统一接口,是对底层...
  • liverpool_deng_lee
  • liverpool_deng_lee
  • 2017-05-25 16:07:42
  • 729

【VBA研究】利用ADO实现VBA连接Oracle并执行存储过程

VBA调用Oracle存储过程完整的程序,已调试成功。
  • iamlaosong
  • iamlaosong
  • 2013-07-12 10:26:37
  • 6761

delphi 中调用存储过程

由于需要,需要在Delphi中调用sql server中写好的存储过程,这里翻看了一些代码,同时也查看了一些网上的例子,在这里算是自己的一个小结。         在Delphi中提供两种方式进行存...
  • shuiyuanfengxing
  • shuiyuanfengxing
  • 2012-09-03 20:29:52
  • 4335

在ADO中如何调用存储过程

请见此篇文章      http://blog.csdn.net/hanxuemin12345/article/details/8620425   (三层架构——存储过程(在ADO.net中调用存储过...
  • hanxuemin12345
  • hanxuemin12345
  • 2013-02-22 12:41:12
  • 1197
    个人资料
    持之以恒
    等级:
    访问量: 18万+
    积分: 4521
    排名: 8203
    最新评论