极端诡异:调用oracle存储过程传integer参数报错!

hpygzhx520 2017-06-30 01:06:33
引用的是Oracle.DataAccess.Client
存储过程定义:
procedure SP_ManualIn(in_shelftype in varchar2,
in_DeviceId in varchar2,
in_isOdd in varchar2,
in_MaterialId in varchar2,
in_MaterialNum in integer,
in_PileType in varchar2,
in_isFinished in varchar2,
in_InShiftId in varchar2,
in_Informid in varchar2,
out_LogisticsId out varchar2,
out_sqlcode out binary_integer,
out_sqlerrm out varchar2) is
begin
--这里将输入参数写入日志备查,仅仅是看调用的时候是否进入到函数主体
end;

注意上述参数有一个是integer,即in_MaterialNum in integer,
我在传入参数的时候这样定义:
OracleCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "SP_MANUALIN";

OracleParameter In_MaterialNum = new OracleParameter();
In_MaterialNum.ParameterName = "In_MaterialNum";
In_MaterialNum.OracleDbType = OracleDbType.Int16;
In_MaterialNum.Direction = ParameterDirection.Input;
In_MaterialNum.Value = 10;
cmd.Parameters.Add(In_MaterialNum);
在调用的时候报错:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1
如果将in_MaterialNum in integer换成其他类型如varchar2则一切正常。
上述废话是为了说明问题的根源就在integer类型。
In_MaterialNum.OracleDbType = OracleDbType.Int16;换成int32等等都试过了,都是报一样的错误。

在不修改存储过程的情况下(因为其他原因,不能修改),怎么解决这个问题?希望大家指点,有条件的朋友帮忙验证一下,谢谢各位。
...全文
374 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hpygzhx520 2017-06-30
  • 打赏
  • 举报
回复
竟然不会根据ParameterName对齐参数,我也是醉了
风吹腚腚凉 2017-06-30
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
看看是不是参数的传入的顺序的问题
我草这你都能看出来是顺序的问题?太屌了
hpygzhx520 2017-06-30
  • 打赏
  • 举报
回复
感谢版主,感谢回复的朋友。就是参数顺序的问题,这种问题只有用Oracle.DataAccess.Client才存在。oracle讲究真多!
闭包客 2017-06-30
  • 打赏
  • 举报
回复
我没有用过 Oracle ,但是我在论坛里面见过一个类似的问题,当时的楼主是升级了 Oracle 的数据提供程序解决的。
hpygzhx520 2017-06-30
  • 打赏
  • 举报
回复
OracleDbType没有Number ,我试试顺序
exception92 2017-06-30
  • 打赏
  • 举报
回复
看看是不是参数的传入的顺序的问题
正怒月神 2017-06-30
  • 打赏
  • 举报
回复
如果程序没问题,那你试试Number
xdashewan 2017-06-30
  • 打赏
  • 举报
回复
存储过程里定义的参数类型和你的不一致吗

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧