使用 C# 将新行插入 Oracle 数据库

问题描述 投票:0回答:1

我想通过C#执行CRUD操作。显然,我对此很陌生。我成功删除了记录,但打开新记录时遇到困难。 PL/SQL 中有插入新行的过程。我尝试用 C# 编写这个程序。我认为我错误地创建了

attr
参数。

这些是 PL/SQL 中用于插入新记录的代码。这里没有问题。

DECLARE
   a_ VARCHAR2(32000) := NULL; --p0
   b_ VARCHAR2(32000) := NULL; --p1
   c_ VARCHAR2(32000) := NULL; --p2
   d_ VARCHAR2(32000) := 'CONTRACT'||chr(31)||'BISAM'||chr(30)||'REQUISITIONER_CODE'||chr(31)||'IFSAPP'||chr(30)||'ORDER_CODE'||chr(31)||'1'||chr(30); --p3
   e_ VARCHAR2(32000) := 'DO'; --p4

BEGIN


ifsapp.PURCHASE_REQUISITION_API.NEW__( a_ , b_ , c_ , d_ , e_ );


EXCEPTION 
WHEN OTHERS THEN 
rollback;

raise;

END;

DECLARE
BEGIN

    COMMIT;

END;

这个

New__
过程属于
ifsapp.PURCHASE_REQUISITION_API.NEW__
,用于插入新行:

PROCEDURE New__ (
   info_       OUT    VARCHAR2,
   objid_      OUT    VARCHAR2,
   objversion_ OUT    VARCHAR2,
   attr_       IN OUT VARCHAR2,
   action_     IN     VARCHAR2 );

这是我的 C# 代码。我无法插入新行。出现如下错误:

public void InserNewRecord()
{
    SetConnection(); // Sets the connection con = new OracleConnection
    cmd = new OracleCommand();
    cmd.Connection = con;
    cmd.CommandText = "ifsapp.PURCHASE_REQUISITION_API.NEW__";
    cmd.CommandType = CommandType.StoredProcedure;

    string attr_ = "'CONTRACT'||chr(31)||'BISAM'||chr(30)||'REQUISITIONER_CODE'||chr(31)||'IFSAPP'||chr(30)||'ORDER_CODE'||chr(31)||'1'||chr(30);";
    string action_ = "DO";

    cmd.Parameters.Add(new OracleParameter()
    {
        ParameterName = "info_",
        Value = null,
        Direction = ParameterDirection.Output
    });
    cmd.Parameters.Add(new OracleParameter()
    {
        ParameterName = "objid_",
        Value = null,
        Direction = ParameterDirection.Output
    });
    cmd.Parameters.Add(new OracleParameter()
    {
        ParameterName = "objversion_",
        Value = null,
        Direction = ParameterDirection.Output
    });
    cmd.Parameters.Add(new OracleParameter()
    {
        ParameterName = "attr_",
        Value = attr_,
        Direction = ParameterDirection.InputOutput
    });
    cmd.Parameters.Add("action_", OracleDbType.Varchar2).Value = action_;

    int x=cmd.ExecuteNonQuery();

    cmd.Parameters.Clear();
}

这是错误:

Oracle.ManagedDataAccess.Client.OracleException:'ORA-20111:UserAllowedSite.RECNOTEXIST:

用户 IFSAPP 未使用该网站

ORA-06512:位于“IFSAPP.ERROR_SYS”,第 203 行

ORA-06512:位于“IFSAPP.USER_ALLOWED_SITE_API”,第 610 行

ORA-06512:位于“IFSAPP.PURCHASE_REQUISITION_API”,第 680 行

ORA-06512:位于“IFSAPP.PURCHASE_REQUISITION_API”,第 1117 行

c# oracle plsql crud
1个回答
0
投票

这里有两点需要注意

  1. ORA-20111。

通常 20000 到 20999 之间的错误是用户引发的错误,即来自您自己的应用程序堆栈的错误。

  1. 错误堆栈

请注意,完整错误指的是 IFSAPP 架构中的各种包。这意味着您正在从 C# 应用程序“成功”调用 API,但在 API 内,它拒绝您的调用。

可能意味着参数没有正确传递,或者可能意味着API正在做它应该做的事情,即拒绝非法数据。

您需要添加一些调试来查看调用的数据库端出现了什么

© www.soinside.com 2019 - 2024. All rights reserved.