Как вы используете Oracle ODP.net ExecuteReader с SP, который возвращает курсор в C #? - PullRequest
1 голос
/ 07 февраля 2012

У меня есть процедура, которая возвращает курсор ref. Требуется 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 раз. Я подумал, что с использованием устройства чтения данных загрузка его в массив и последующее циклическое выполнение по массиву будет быстрее, чем чтение в набор данных. Самому SP требуется 1 секунда, чтобы вернуться, он тратит 19 секунд на линии заполнения.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2014

вам нужно будет указать это как выходной параметр типа ref.курсор, проверьте следующую ссылку для получения более подробной информации: ODP.NET In-Out Curors

0 голосов
/ 08 февраля 2012

Блог Марка Уильяма содержит аккуратную статью об использовании "размера выборки" для увеличения производительности при использовании Oracle Ref Cursor.Очень интересное чтение и может быть хорошим началом для образца.

Это немного старше (и я, как признание, не касался ODP.NET в течение нескольких лет), но я сомневаюсь в ODP.NET радикально изменил свои позиции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...