首页 新闻 会员 周边

C# ODP.NET 调用Oracle函数报错的问题

0
悬赏园豆:80 [已解决问题] 解决于 2019-12-05 12:05

C# 如何通过ODP.NET调用Oracle函数?

增删改查,执行存储过程都可以,唯独不能调用函数,虽然能够通过调用带有输出参数的存储过程,但是这样需要花大量时间修改Oracle里的函数。
以下是我的代码,报错内容如下:

ODP.NET版本信息如下:

C# 代码如下:
/// <summary>
/// 执行函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnExeFunc_Click(object sender, EventArgs e)
{
// 获取选中行
int strRowIdex = dgvMain.CurrentCell.RowIndex;
// 创建参数对象syid和返回值对象v_j
OracleParameter[] param = new OracleParameter[] {
new OracleParameter("v_syid", OracleDbType.Varchar2, 100),
new OracleParameter("V_J", OracleDbType.Varchar2, 200)
};
param[0].Value = dgvMain.Rows[strRowIdex].Cells["SYID"].Value;
//param[0].Direction = ParameterDirection.Input;
param[1].Direction = ParameterDirection.ReturnValue;
// 更新数据库表
OracleHelper.ExecuteNonQuery(OracleHelper.oraConnStr, CommandType.StoredProcedure, OracleSQL.ExeFunWzjPerson, param);
// 消息提示
MessageBox.Show("执行成功!", "提示");
MessageBox.Show(param[1].Value.ToString(), "提示");
}

Oracle 函数如下:

CREATE OR REPLACE FUNCTION f_update_wzj_person (v_syid in VARCHAR2) return varchar2 is
V_J VARCHAR2(80);
begin
V_J := '1123';
update wzj_person t set t.birthday = sysdate - 10 where t.syid = v_syid;
commit;
return(V_J);
end;

Jeremy.Wu的主页 Jeremy.Wu | 初学一级 | 园豆:48
提问于:2019-12-05 10:48
< >
分享
最佳答案
0

升级ODP.NET版本解决。。。。

Jeremy.Wu | 初学一级 |园豆:48 | 2019-12-05 12:04

参考@邀月大神的答案:
我下午试了一下,ParameterDirection.ReturnValue的参数一定要第一个加。
https://www.cnblogs.com/downmoon/p/11992212.html

Jeremy.Wu | 园豆:48 (初学一级) | 2019-12-09 15:47
其他回答(1)
0

--换成以下代码试试:

OracleParameter[] param = new OracleParameter[] {
new OracleParameter("V_J", OracleDbType.Varchar2, 200),
new OracleParameter("v_syid", OracleDbType.Varchar2, 100)
};
param[1].Value = dgvMain.Rows[strRowIdex].Cells["SYID"].Value;
param[0].Direction = ParameterDirection.ReturnValue;

邀月 | 园豆:25475 (高人七级) | 2019-12-05 20:45

我下午试了一下,ParameterDirection.ReturnValue的参数一定要第一个加。
https://www.cnblogs.com/downmoon/p/11992212.html

支持(1) 反对(0) 邀月 | 园豆:25475 (高人七级) | 2019-12-05 21:52

@邀月: 升级版本后,没注意看,执行没报错以为好了,实际上后台未更新,感谢您!

支持(0) 反对(0) Jeremy.Wu | 园豆:48 (初学一级) | 2019-12-09 15:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册