c#调用oracle具有输入输出参数还有返回值的自定义函数

ssq4706 2014-08-04 04:54:36
函数如下:
CREATE OR REPLACE FUNCTION function1(
f1 integer,
f2 out varchar2
) return integer is
//业务处理
if then
return 0;
elsif then
retrun -1;
end if;

c#怎么调用?谢谢
...全文
196 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssq4706 2014-08-05
  • 打赏
  • 举报
回复
以上写法会导致输入参数传递不进去,折腾了一晚上,操,找到了解决方法:返回值参数应放到第一位,即:

object objChart;
            OracleParameter p1 = new OracleParameter("f1", OracleDbType.Int32, 100, 5, ParameterDirection.Input);
            OracleParameter p2 = new OracleParameter("f2", OracleDbType.Varchar2, 100, "", ParameterDirection.Output);
            OracleParameter p3 = new OracleParameter();
            p3.OracleDbType = OracleDbType.Int32;
            p3.Direction = ParameterDirection.ReturnValue;
            OracleParameter[] cmdParm1 = new OracleParameter[] {p3,  p1, p2 };
            OracleDBHelper.ExecuteNonQuery("functionName", System.Data.CommandType.StoredProcedure, cmdParm1);
            objChart = p3.Value;
            return objChart;

ssq4706 2014-08-04
  • 打赏
  • 举报
回复
引用 1 楼 wangnaisheng 的回复:
和调用存储过程是一样滴 http://bbs.csdn.net/topics/330222462 参考以前的帖子
引用 2 楼 sunny906 的回复:

            OracleConnection con = new OracleConnection("");
            OracleCommand cmd = new OracleCommand();

            OracleParameter p1 = new OracleParameter("f1", OracleType.Int32);
            p1.Direction = ParameterDirection.Input;
            p1.Value = 5;
            OracleParameter p2 = new OracleParameter("f2", OracleType.VarChar);
            p2.Direction = ParameterDirection.Output;
            p2.Value = "f";
            OracleParameter p3 = new OracleParameter();
            p3.OracleType = OracleType.Int32;
            p3.Direction = ParameterDirection.ReturnValue;

            cmd.Parameters.Add(p1);
            cmd.Parameters.Add(p2);
            cmd.Parameters.Add(p3);

            cmd.Connection = con;
            cmd.CommandText = "function1";
            cmd.CommandType = CommandType.StoredProcedure;

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
我是这么写的

object objChart;
            OracleParameter p1 = new OracleParameter("f1", OracleDbType.Int32, 100, 5, ParameterDirection.Input);
            OracleParameter p2 = new OracleParameter("f2", OracleDbType.Varchar2, 100, "", ParameterDirection.Output);
            OracleParameter p3 = new OracleParameter();
            p3.OracleDbType = OracleDbType.Int32;
            p3.Direction = ParameterDirection.ReturnValue;
            OracleParameter[] cmdParm1 = new OracleParameter[] { p1, p2, p3 };
            OracleDBHelper.ExecuteNonQuery("functionName", System.Data.CommandType.StoredProcedure, cmdParm1);
            objChart = p3.Value;
            return objChart;
会报ora-01403:未找到任何数据 的错误。
sunny906 2014-08-04
  • 打赏
  • 举报
回复

            OracleConnection con = new OracleConnection("");
            OracleCommand cmd = new OracleCommand();

            OracleParameter p1 = new OracleParameter("f1", OracleType.Int32);
            p1.Direction = ParameterDirection.Input;
            p1.Value = 5;
            OracleParameter p2 = new OracleParameter("f2", OracleType.VarChar);
            p2.Direction = ParameterDirection.Output;
            p2.Value = "f";
            OracleParameter p3 = new OracleParameter();
            p3.OracleType = OracleType.Int32;
            p3.Direction = ParameterDirection.ReturnValue;

            cmd.Parameters.Add(p1);
            cmd.Parameters.Add(p2);
            cmd.Parameters.Add(p3);

            cmd.Connection = con;
            cmd.CommandText = "function1";
            cmd.CommandType = CommandType.StoredProcedure;

            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
wangnaisheng 2014-08-04
  • 打赏
  • 举报
回复
和调用存储过程是一样滴 http://bbs.csdn.net/topics/330222462 参考以前的帖子

111,096

社区成员

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

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

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