C# 从C调用Oracle中的存储过程#
我有一个带有文本框的页面,该文本框通过Oracle中的存储过程传递值。该过程已更改,因此现在有两个参数,一个用于输入值,另一个用于返回整数值 以下是Oracle过程:C# 从C调用Oracle中的存储过程#,c#,asp.net,oracle,stored-procedures,C#,Asp.net,Oracle,Stored Procedures,我有一个带有文本框的页面,该文本框通过Oracle中的存储过程传递值。该过程已更改,因此现在有两个参数,一个用于输入值,另一个用于返回整数值 以下是Oracle过程: procedure UnoxDataFix(p_shpmt_nbr in pkms.asn_hdr.shpmt_nbr%type, retval out integer) is begin retval:=0; for r in ( -- simple select statement
procedure UnoxDataFix(p_shpmt_nbr in pkms.asn_hdr.shpmt_nbr%type, retval out integer) is
begin
retval:=0;
for r in (
-- simple select statement
)
loop
if(r.stat_code = 10 and r.whse_xfer_flag = 'Y')
then
update pkms.asn_dtl ad
-- simple set statement
update pkms.asn_hdr ah
-- simple set statement
where ah.shpmt_nbr = p_shpmt_nbr
RETURNING 1 into retval;
commit;
end if;
end loop;
end;
这是我的核心C代码:
this.oraServer.ExecuteNonQuery(this.connectionString, CommandType.Text, "begin INTEGRATION.UnoxDataFix('" + input + "'); end;");
连接字符串可以工作。这只是给出错误的实际过程。“输入”值是发送到程序的实际值。但是对于将“retval”返回到站点,我不知道如何返回。我试着用谷歌搜索我能搜索到的东西,但没用。
我有点慢,所以欢迎大家发表意见。:) 因为该过程现在需要两个参数,所以您需要给出两个参数,而不仅仅是输入参数。 此外,我更喜欢使用绑定变量来防止sql注入。(是的,您也可以将绑定变量用于OUT参数) 我不熟悉C#的细节,因此我无法帮助您使用插入和检索值的确切方法 另一方面,这是什么样的命名约定?你的目标是不可读吗?:) 包装编号:asn\U hdr.shpmt\U nbr
看见去掉begin/end语句。CommandText中应仅显示函数名。您需要添加与CommandText分开的参数。@Sliveninja谢谢,这很有帮助:)谢谢您的提示。我可以使用绑定变量,但这对C#如何从过程中获取返回值没有帮助。“顺便说一句,这是什么样的命名约定?你的目标是不可读吗?:)“是的,我知道你的意思,名字很难读:)
begin INTEGRATION.UnoxDataFix(:input, :retval); end;