Как сохранить значение параметра в процедуре оракула из веб-сервиса

3

Итак, что я хочу сделать, это использовать вызов веб-службы для реализации процедуры оракула. Чтобы быть более конкретным: я так делаю, что, когда я помещаю значение в параметр в своем веб-сервисе и запускаю его, я хочу, чтобы это значение было отправлено процедуре в oracle, а затем после успешного запуска для возврата к веб-службе как истина.

В настоящее время я пытаюсь это сделать:

        public bool InsertMachineModels(string MachineModel)
    {
        logger.DebugFormat("FilteredReportInputsDAO.InsertMachineModel({0})", MachineModel);
        bool retVal = true;
        using (OracleConnection conn = new OracleConnection(connectionString))
        {
            using (OracleCommand cmd = new OracleCommand("Admin_Utilities.InsertMachineModel", conn))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("pMachineModel", OracleType.Cursor).Value = Convert.ToString(MachineModel);
                try
                {
                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    if (IsErrorLogging)
                        logger.Error("FilteredReportInputsDAO.InsertMachineModels() Exception: ", ex);
                    retVal = false;
                }
                finally
                {
                    conn.Close();
                }
            }
        }
        return retVal;
    }

Ниже вы найдете мою процедуру, которая корректно выполняется при реализации в sql-разработчике.

   procedure InsertMachineModel( pMachineModel in nvarchar2)
    is
    begin
        insert into machine_models (Machine_model) values (pMachineModel);
        commit;

     Exception when others then
      pb_util.logdata(1, 'Admin_utilities.InsertMachineModel', 'Exception thrown', sqlerrm || ' stack ' || dbms_utility.format_error_backtrace);
      rollback;
      raise;
    end;

Я считаю, что проблема заключается в этой строке в веб-службе:

cmd.Parameters.Add("pMachineModel", OracleType.Cursor).Value = Convert.ToString(MachineModel);

В моем регистраторе говорится, что курсор должен быть реализован как параметр parameterdirection.output, однако я не верю, что в этом случае вы можете принять значение и отправить его на api, но если я ошибаюсь, не стесняйтесь исправить меня.

Итак, я догадываюсь, что мой вопрос: если то, что я считаю правильным в приведенном выше высказывании о параметрировании, неверно, что правильный ответ?

Может ли кто-нибудь дать мне какие-либо предложения относительно того, как реализовать то, что я пытаюсь сделать правильно?

Любая помощь или предложения приветствуются. Спасибо.

Теги:
plsql

1 ответ

4
Лучший ответ

Я думаю, ваша проблема в этой строке:

cmd.Parameters.Add("pMachineModel", OracleType.Cursor).Value = 
    Convert.ToString(MachineModel);

Вы пытаетесь добавить параметр типа OracleType.Cursor, что неверно или необходимо. Попробуйте изменить строку следующим образом:

cmd.Parameters.Add("pMachineModel", OracleType.Char).Value = MachineModel;

(Здесь также нет необходимости Convert.ToString - MachineModel уже есть String).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню