我想通过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 行
这里有两点需要注意
通常 20000 到 20999 之间的错误是用户引发的错误,即来自您自己的应用程序堆栈的错误。
请注意,完整错误指的是 IFSAPP 架构中的各种包。这意味着您正在从 C# 应用程序“成功”调用 API,但在 API 内,它拒绝您的调用。
这可能意味着参数没有正确传递,或者可能意味着API正在做它应该做的事情,即拒绝非法数据。
您需要添加一些调试来查看调用的数据库端出现了什么