Какие OleDbTypes связаны с Oracle Number и varchar2 при вызове функции - PullRequest
2 голосов
/ 03 февраля 2010

Я пытаюсь отобразить параметры OleDb в функцию Oracle. Я смог сделать это, используя пространство имен System.Data.Oracle, но затем обнаружил, что это ограничено, поэтому я решил переписать его как OldDb, чтобы избежать установки поставщика Oracle.

В качестве примера я определил следующую функцию оракула:

create function GetImagePath (AIRSNumber in number)
   return varchar2
is
   begin
     return '\\aiimg524\images\Ofndrtrk\2010\01\0kvrv1p000lcs74j';
   end;

и я звоню по следующему коду:

using (var command = new OleDbCommand())
        {
          command.Connection = con;
          command.CommandText = ConfigurationManager.AppSettings[OTRAK_PHOTO_FUNC];
          command.CommandType = CommandType.StoredProcedure;

          string parm = ConfigurationManager.AppSettings[OTRAK_PHOTO_PARM];

          command.Parameters.Add(parm, OleDbType.Decimal); // maps to oracle Number
          command.Parameters[parm].Direction = ParameterDirection.Input;
          command.Parameters[parm].Value = airsNumber;

          command.Parameters.Add(RETURN_VALUE, OleDbType.Variant); // maps to Oracle varchar2
          command.Parameters[RETURN_VALUE].Direction = ParameterDirection.ReturnValue;
          try
          {
            con.Open();
            command.ExecuteNonQuery();
            path = command.Parameters[RETURN_VALUE].Value.ToString();
          }

Я пробовал несколько разных типов OleDB для параметра и возвращаемого значения. текущая попытка взята из таблицы сопоставления, которую я нашел в сети, где указано число = десятичное и varchar2 = вариант. Я собираюсь попробовать каждую перестановку типов в перечислении и хотел попросить помощи. не очень полезное сообщение об ошибке, которое я получаю:

[System.Data.OleDb.OleDbException] = {"ORA-06550: строка 1, столбец 7: \ nPLS-00306: неверный номер или типы аргументов при вызове 'GETIMAGEPATH' \ nORA-06550: строка 1, столбец 7: \ nPL / SQL: оператор игнорируется "}

1 Ответ

1 голос
/ 03 февраля 2010

Это на самом деле не имеет ничего общего с типом параметров, кроме порядка.При использовании поставщика OleDb для Oracle учитываются не имена параметров в коллекции параметров, а порядок их добавления.Когда вызывается функция оракула, возвращаемое значение является свободным параметром, который должен быть объявлен первым.добавив мой параметр возвращаемого значения, а затем фактический параметр функции начал работать.

с помощью команды. Параметры. Параметр AddMithValue (parm, value) также немного упрощает.

...