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