Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ODP.Net OracleCommand. Как вернуть массив из функции?  [new]
teepok
Member

Откуда:
Сообщений: 361
Добрый день.
К Oracle хожу через ODP.Net из C#
Есть функция:
TYPE EmployeeSet IS TABLE of mytable%rowtype;
MySet EmployeeSet;

function Check(Str IN varchar) return EmployeeSet IS
begin
  select *
  bulk collect into MySet
  from mytable
  where name lile 'aaa';
  return  MySet;
end;

Как из C# правильно забиндить параметры? как не бился ничего не получилось:

  OracleCommand cmd = new OracleCommand;
  cmd.CommandText = "check";
  cmd.CommandType= CommandType.StoredProcedure;
  OracleParameter param1 = new OracleParameter("1",OracleDbType.Object, ParameterDirection.ReturnValue);
  param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
  param1.Size = 2000;
  OracleParameter param2 = new OracleParameter("2",OracleDbType.Varchar2, ParameterDirection.Input);
  cmd.Parameters.Add(param1);
  cmd.Parameters.Add(param2);
  cmd.ExecuteNonQuery();

Ошибка: Invalid Parameter binding. Parameter name 1;

Все комбинации перепробовал никак не получается (.
30 апр 10, 16:40    [8716146]     Ответить | Цитировать Сообщить модератору
 Re: ODP.Net OracleCommand. Как вернуть массив из функции?  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
teepok
Добрый день.
К Oracle хожу через ODP.Net из C#
Есть функция:
TYPE EmployeeSet IS TABLE of mytable%rowtype;
MySet EmployeeSet;

function Check(Str IN varchar) return EmployeeSet IS
begin
  select *
  bulk collect into MySet
  from mytable
  where name lile 'aaa';
  return  MySet;
end;

Как из C# правильно забиндить параметры? как не бился ничего не получилось:


проверьте имя процедуры, очередность и названия параметров .
должны совпадать даже по регистру.
  OracleCommand cmd = new OracleCommand;
  cmd.CommandText = "check";
  cmd.CommandType= CommandType.StoredProcedure;
  OracleParameter param1 = new OracleParameter("1",OracleDbType.Object, ParameterDirection.ReturnValue);
  param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
  param1.Size = 2000;
  OracleParameter param2 = new OracleParameter("2",OracleDbType.Varchar2, ParameterDirection.Input);
  cmd.Parameters.Add(param1);
  cmd.Parameters.Add(param2);
  cmd.ExecuteNonQuery();

Ошибка: Invalid Parameter binding. Parameter name 1;

Все комбинации перепробовал никак не получается (.
30 апр 10, 16:43    [8716164]     Ответить | Цитировать Сообщить модератору
 Re: ODP.Net OracleCommand. Как вернуть массив из функции?  [new]
comphead
Member

Откуда: Киев
Сообщений: 3390
проверьте названия процедуры, очередность и названия параметров.
должны совпадать вплоть до регистра.
30 апр 10, 16:43    [8716168]     Ответить | Цитировать Сообщить модератору
 Re: ODP.Net OracleCommand. Как вернуть массив из функции?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18339
teepok

TYPE EmployeeSet IS TABLE of mytable%rowtype;
  param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

Не знаю как там в дотнете, но в plsql EmployeeSet объявлен не как ассоциативный.
30 апр 10, 16:48    [8716196]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить