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;
升级ODP.NET版本解决。。。。
参考@邀月大神的答案:
我下午试了一下,ParameterDirection.ReturnValue的参数一定要第一个加。
https://www.cnblogs.com/downmoon/p/11992212.html
--换成以下代码试试:
【
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;
】
我下午试了一下,ParameterDirection.ReturnValue的参数一定要第一个加。
https://www.cnblogs.com/downmoon/p/11992212.html
@邀月: 升级版本后,没注意看,执行没报错以为好了,实际上后台未更新,感谢您!