使用 DAAB 从 Oracle 返回多个 Ref 游标






3.87/5 (10投票s)
如何使用 DAAB 从 Oracle 返回多个 Ref 游标
引言
本文解释了如何使用 Enterprise Library 的数据访问应用程序块 (DAAB) 处理返回多个 ref cursors 的 Oracle 存储过程。
背景
DAAB 用于各种情况,例如读取用于显示的数据、通过应用程序层传递数据以及将更改后的数据提交回数据库系统。 它包括对存储过程和内联 SQL 的支持。 换句话说,数据访问应用程序块提供对 ADO.NET 最常用功能的访问,使用简单易用的类。
Using the Code
(1) 对于返回单个 Ref Cursor 的过程
- 添加对
Microsoft.Practices.EnterpriseLibrary.Data
的引用。 - 创建数据库对象。
- 创建
DbCommand
对象并传递存储过程的名称。 - 如果存储过程接受任何输入参数,请按如下代码所示传递该参数
Database db = DatabaseFactory.CreateDatabase("Connection String"); DbCommand cmd = db.GetStoredProcCommand("PKG_TEST.EMAIL"); db.AddInParameter(cmd, "varMODULEID", DbType.String); db.SetParameterValue(cmd, "varMODULEID", 1); DataSet ds = db.ExecuteDataSet(cmd); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind();
现在,存储过程 "PKG_TEST.EMAIL
" 接受一个输入参数 varMODULEID
并返回一个单个 ref
游标。 但是,如上代码所示,我没有为 ref 游标创建任何参数。
所以,问题出现了,它怎么知道 ref 游标呢???
答案在 DAAB 的代码中。
当我们调用返回单个 ref 游标的存储过程时,DAAB 会自动创建一个类型为 cursor
的参数。 自动创建的参数的名称是 cur_OUT
。 在这里,应该记住一点,即您的存储过程中 ref 游标的名称必须是 cur_OUT
。 因此,在返回单个 ref 游标的存储过程的情况下,您不需要将 ref 游标作为参数传递给 DbCommand
对象。
(2) 对于返回多个 Ref Cursors 的过程
- 添加对
Microsoft.Practices.EnterpriseLibrary.Data
的引用。 - 创建数据库对象。
- 创建
DbCommand
对象并传递存储过程的名称。 - 如果存储过程接受任何输入参数,请按如下代码所示设置该参数的值
Database db = DatabaseFactory.CreateDatabase("Connection String"); object[] results = new object[3]; DbCommand cmd = db.GetStoredProcCommand("PKG_TEST.DEPARTMENT", results); db.SetParameterValue(cmd, "varDEPTID", 1); DataSet ds = db.ExecuteDataSet(cmd); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); GridView2.DataSource = ds.Tables[1]; GridView2.DataBind();
当您为返回多个游标的存储过程创建 DbCommand
对象时,您必须将对象数组传递给 GetStoredProcCommand
方法。 数组的大小必须等于存储过程所需的参数数量。
在这种情况下,存储过程 "PKG_TEST.DEPARTMENT
" 接受一个输入参数并返回两个 ref 游标。 这里
object[] results = new object[3];
我创建一个大小为三个的数组,这表明我的存储过程需要三个参数。
因此,当您的存储过程返回一个以上的 ref 游标时,您必须创建一个对象数组,其中数组的大小应等于您的存储过程所接受的参数的数量。
历史
- 2009 年 6 月 9 日:初始帖子