#c# #oracle #plsql
#c# #Oracle #plsql
Вопрос:
Итак, что я хочу сделать, это использовать вызов веб-службы для реализации процедуры oracle. Чтобы быть более конкретным: я хочу, чтобы, когда я помещаю значение в параметр в моей веб-службе и запускаю его, я хочу, чтобы это было значение, отправленное процедуре в oracle, а затем после успешного запуска возвращалось в веб-службу как true.
В настоящее время я пытался сделать следующее:
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 developer.
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, но если я ошибаюсь, не стесняйтесь меня поправить.
Итак, я предполагаю, что мой вопрос таков: если то, что я считаю правильным в приведенном выше утверждении о parameterdirection, неверно, каков правильный ответ?
Может ли кто-нибудь дать мне какие-либо предложения относительно того, как правильно реализовать то, что я пытаюсь сделать?
Любая помощь или предложения приветствуются. Спасибо.
Ответ №1:
Я думаю, что ваша проблема в этой строке:
cmd.Parameters.Add("pMachineModel", OracleType.Cursor).Value =
Convert.ToString(MachineModel);
Вы пытаетесь добавить параметр типа OracleType.Cursor
, который не является правильным или необходимым. Попробуйте изменить строку на эту:
cmd.Parameters.Add("pMachineModel", OracleType.Char).Value = MachineModel;
(Здесь также нет необходимости Convert.ToString
— MachineModel
уже есть String
).