PL/SQL中带有返回值的函数怎么在C#中调用?

玉翼麒麟 2017-09-15 10:40:35
PL/SQL中的函数及其参数如下:
PACKAGE:U1BP.pxf000bdzrf
FUNCTION getEcCheckBDW31(
p_co VARCHAR2, IN==> 公司
p_empid VARCHAR2, IN==> 员工代号
p_boffid VARCHAR2, IN==>差假代号
p_frday VARCHAR2, IN==>差假起日
p_frhh VARCHAR2, IN==>差假起时
p_today VARCHAR2, IN==>差假迄日
p_tohh VARCHAR2, IN==>差假迄时
p_dys NUMBER, IN==>日数
p_hrs NUMBER, IN==>时数
p_nl VARCHAR2, IN==>NL纪录,N表示正常,L表示删除
p_odupz VARCHAR2, IN==>出勤厂区
p_odudp VARCHAR2, IN==>出勤部门
p_ajmk VARCHAR2, IN==>调整注记
p_boffidclass VARCHAR2) IN==>差假代号类别,固定为BOFFID
RETURN VARCHAR2 OUT==> 回传的错误讯息


我对应写的C#代码如下:
public static void ChaiJiaDan(int flag, string strName, params Object[] paras)//主表传入ERP方法,接受两个参数,第一个是文档所提供的传ERP存储过程
{
constring[0] = "server=bhhg;uid=u1bs2;pwd=u1bs2";
constring[1] = "server=bhzy;uid=u1bs2;pwd=u1bs2";
constring[2] = "server=bhfd;uid=u1bs2;pwd=u1bs2";
constring[3] = "server=bhgj;uid=u1bs2;pwd=u1bs2";
//第二个参数是接收一个数组,该数组里面是对应的表单字段
using (OracleConnection conn = new OracleConnection(constring[flag]))//数据库连接字符串
{

OracleCommand cmd = new OracleCommand(strName, conn);//创建一个执行语句的对象
OracleParameter[] para = new OracleParameter[]
{
new OracleParameter("p_co",OracleType.VarChar), //以下为ERP接收的字段,跟文档上保持一致
new OracleParameter("p_empid",OracleType.VarChar),
new OracleParameter("p_boffid",OracleType.VarChar),
new OracleParameter("p_frday",OracleType.VarChar),
new OracleParameter("p_frhh",OracleType.VarChar),

new OracleParameter("p_today",OracleType.VarChar),
new OracleParameter("p_tohh",OracleType.VarChar),
new OracleParameter("p_dys",OracleType.Number),
new OracleParameter("p_hrs",OracleType.Number),
new OracleParameter("p_nl",OracleType.VarChar),

new OracleParameter("p_odupz",OracleType.VarChar),
new OracleParameter("p_odudp",OracleType.VarChar),
new OracleParameter("p_ajmk",OracleType.VarChar),
new OracleParameter("p_boffidclass",OracleType.VarChar)


};

for (int i = 0; i < paras.Length; i++)
{

para[i].Value = paras[i];

}

cmd.Parameters.AddRange(para);

OracleParameter res = new OracleParameter("wrk_message", OracleType.VarChar, 100);
res.Direction = ParameterDirection.ReturnValue;
cmd.CommandType = CommandType.StoredProcedure;
conn.Open();
cmd.ExecuteNonQuery(); //执行传ERP操作
string temp = res.Value.ToString();

if (temp != "") //判断是否操作成功
{
throw new Exception(string.Format("未执行成功,错误代号是{0}", temp));
}
conn.Close();
}

}

执行老是报错!说“不是过程或函数未定义”
求大神帮忙解决!
...全文
185 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-09-18
  • 打赏
  • 举报
回复
楼主,你的主方法中缺少getEcCheckBDW31的调用。
卖水果的net 2017-09-18
  • 打赏
  • 举报
回复
函数调用,要用 select fn(参数1,参数2,,,) from dual 直接写一个函数名,像是再执行一个存储过程。

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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