如何使用Oracle ODP.net ExecuteReader与SP在C#中返回游标?

时间:2012-02-07 18:06:35

标签: c# oracle odp.net

我有一个返回引用游标的过程。它需要4个参数,我正在使用C#。我已经在网上寻找了一些例子,但无法让它们中的任何一个工作

这就是我所拥有的

public static int test(int test_id, int progr, int setID, string BFilter)
{
  object cur1 = System.DBNull.Value;
  string spname = "SP.GetValues";

  using (Oracle.DataAccess.Client.OracleCommand command = DB.GetStoredProcCommand(spname, test_id, progr, setID, BFilter, cur1))
  {
    using (OracleDataReader reader = command.ExecuteReader())
    {
      while (reader.Read())
      {
        //load array
      }
    }
  }

  int t = 1;
  return t;
}

我使用的数据集工作得很好,除了每次花20秒获得500行,我必须这样做800次。我想使用datareader,将其加载到数组中然后在数组上循环将比读入数据集更快。 SP本身需要1秒才能返回,它会在填充线上花费19秒。

2 个答案:

答案 0 :(得分:0)

使用Oracle Ref Cursor时,Mark William的Blog有一个neat article on using "fetch size" to increase performance。非常有趣的阅读,可能是一个开始样品的好地方。

它有点老了(而且,作为承认,几年没有触及ODP.NET),但我怀疑ODP.NET已经从根本上改变了它的位置。

答案 1 :(得分:0)

您需要将其指定为ref类型的输出参数。光标, 请查看以下链接以获取更多详细信息:ODP.NET in-out Curors