Вызов хранимой процедуры Oracle на C# с использованием Oracle.DataAccess (с параметром)

Итак, я пытаюсь вызвать хранимую процедуру Oracle из своего приложения С# .NET. Большинство онлайн-справок, которые я могу найти, предлагают «использовать System.Data.OracleClient;», но .Net 3.5 не распознает это пространство имен, поэтому вместо этого я использую «Oracle.DataAccess.Client».

Вот некоторый перефраз моего кода ниже, с ранее настроенным и протестированным OracleConnection под названием «myConn», уже заполненным параметром «: arg_myArg» (это число, если это имеет значение):

command.Connection = myConn;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "exec mySchema.myProc(:arg_myArg)"
command.ExecuteNonQuery();

Хитрость в том, что процедура ничего не возвращает, она просто заполняет другую таблицу, из которой я извлекаю данные. Однако, когда я пытаюсь запустить приведенный выше код, я получаю «OracleException» в последней строке и выдает эту ошибку:

ORA-06550: line 1, column 13:
PLS-00103: Encountered the symbol "MYSCHEMA" when expecting one of the following:

   := . ( @ % ;
The symbol ":=" was substituted for "MYSCHEMA" to continue.

Вместо этого удаление «exec» из команды дает эту ошибку:

ORA-06550: line 1, column 8:
PLS-00801: internal error [22503]
ORA-06550: line 1, column 8:
PL/SQL: Statement ignored

Есть идеи? Буду рад прояснить что-нибудь

Это моя первая публикация на stackoverflow.com и моя последняя неделя на этой работе, поэтому я ценю ваше понимание и относительную поспешность в выяснении этого.


person KeithA45    schedule 21.03.2011    source источник
comment
Я настоятельно рекомендую вам использовать клиент Microsoft. Убедитесь, что вы добавили ссылку на System.Data.OracleClient.dll.   -  person pilotcam    schedule 21.03.2011
comment
почему @pilotcam? Microsoft отказалась от клиента MS Oracle (System.Data.OracleClient) и рекомендует использовать ODP (Oracle.DataAccess.Client). blogs.msdn.com/ б/адонет/архив/2009/06/15/   -  person Mike Ohlsen    schedule 21.03.2011


Ответы (1)


Я думаю, вам нужно что-то вроде этого

command.Connection = myConn;
command.CommandType = CommandType.StoredProcedure;  
command.CommandText = "mySchema.myProc";  // the proc name   
command.Parameters.Add(/* TODO: Add parameter here */); 
command.ExecuteNonQuery();
person Community    schedule 21.03.2011
comment
Кажется, это исправлено. ДЛЯ БУДУЩИХ ПОИСКОВ ИНФОРМАЦИИ: Оказывается, чтобы запустить его, мне нужно было НЕ включать exec в команду, НЕ включать параметр в вызов процедуры и сохранять параметр оракула, сохраненный в команде, а НЕ его соединение . - person KeithA45; 23.03.2011