какие OleDbTypes связаны с Oracle Number и varchar2 при вызове функции

Я пытаюсь сопоставить параметры 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: инструкция проигнорирована"}


person MarkDav.is    schedule 03.02.2010    source источник


Ответы (1)


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

использование command.Parameters.AddWithValue(parm, value) также немного упрощает ситуацию.

person MarkDav.is    schedule 03.02.2010