c# - 如何将参数值存储在 webservice 的 oracle 过程中

标签 c# oracle plsql

所以我想做的是使用网络服务调用来实现 oracle 过程。更具体地说:我这样做是为了当我将一个值放入我的 web 服务中的参数并运行它时,我希望它是发送到 oracle 中的过程的值,然后在成功运行后返回到 web 服务确实如此。

我目前尝试做的是:

        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,但如果我错了请随时纠正我.

所以我想我的问题是:如果我认为上面关于参数方向的陈述是错误的,那么正确答案是什么?

任何人都可以就如何正确实现我尝试做的事情给我任何建议吗?

非常感谢任何帮助或建议。谢谢。

最佳答案

我认为你的问题出在这一行:

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

您正在尝试添加 OracleType.Cursor 类型的参数,这是不正确或不必要的。尝试将行更改为:

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

(这里也不需要 Convert.ToString - MachineModel 已经是一个 String)。

关于c# - 如何将参数值存储在 webservice 的 oracle 过程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689718/

相关文章:

sql - NOT IN运算符问题Oracle

oracle - 在Oracle嵌套表中查找特定的varchar

c# - 在 TextBlock 的 CoerceValueCallback 中添加内联时出现 FatalExecutionEngineError

c# - 从动态程序集/模块中删除类

sql - INTEGER 括号内的数字表示什么?

javascript - 使用 JavaScript 连接到 Oracle DB

c# - 运行 WPF 应用程序框架示例时遇到问题

C# 有没有办法用文本框搜索所有 ListView 项目?

Java JDBC - 如何使用 tnsnames.ora 连接到 Oracle

sql - 如何为 n :m relations 设计历史记录