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