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