65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.87/5 (10投票s)

2009年6月9日

CPOL

2分钟阅读

viewsIcon

65939

downloadIcon

522

如何使用 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 日:初始帖子
© . All rights reserved.