有人在社区问到:c#调用甲骨文中自定义函数的返回值时,无法正常调用。但在PL/SQL中正常调用返回。
于是动手一试:
创建或替换函数F_Update_Grade (v_UserID数量) 返回nvarchar2 V_Grade nVARCHAR2 (20); 开始 V_Grade:=' 1205 '; 更新TESTDB3设置等级=V_Grade PKID=v_UserID; 提交; 返回(V_Grade); 结束F_Update_Grade;
正常调用返回:
声明 V_Result nvarchar2 (1000):="; V_UserID数量(10):=1; 开始 V_Result:=f_update_grade (V_UserID); dbms_output。put_line('值:' | | V_Result); 结束;/* 值:1205 */
1)准备Oracle.ManagedDataAccess.Client,在Nuget管理器中搜索Oralce,并安装Oracle.ManagedDataAccess最新稳定版
19.5
2,核心访问代码:
使用Oracle.ManagedDataAccess.Client; 使用系统; 使用System.Data; 使用System.Data.SqlClient; 名称空间TestOracle_ManagedDataAccess { 类项目 { 静态void Main (string [] args) { TestFUNCTION3 (); Console.ReadLine (); } 静态孔隙TestFUNCTION3 () { 字符串strConn=" Data Source=127.0.0.1/BCS;用户ID=user2019;密码=password9102”;//OracleConnection objConn=new OracleConnection (strConn); 字符串strFun=癋_Update_Grade”;//字符串strFun=癋_Get_Grade”; 使用(OracleConnection objConn=new OracleConnection (strConn)) { 使用(OracleCommand cmd=new OracleCommand (strFun objConn)) { 试一试 {//获取选中行//int strRowIdex=1;//创建参数对象 OracleParameter p1=new OracleParameter (“v_UserID OracleDbType。Int32, ParameterDirection.Input); OracleParameter p2=new OracleParameter (“V_Grade OracleDbType。NVarchar2 20); p1。值=https://www.yisu.com/zixun/1;//取PKID为1的记录 p2。方向=ParameterDirection.ReturnValue;//更新数据库表 cmd。CommandType=CommandType.StoredProcedure; objConn.Open ();/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *注意,输出参数一定要第一个加,函数的返回值也是赋给第一个参数*; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */cmd.Parameters.Add (p1); cmd.Parameters.Add (p2); cmd.ExecuteNonQuery ();//返回结果值 控制台。WriteLine (“V_Grade是:”+ p2.Value.ToString ()); Console.WriteLine(“OK”); } 抓住(SqlException异常交货) { objConn.Close (); 控制台。WriteLine(“错误:“+ ex.Message); } 最后 { cmd.Dispose (); objConn.Close (); } } } }
运行调试,没报的错,但也没有更新数据表,注意:在执行前先将原数据表中分数值更新为1,程序运行后级值仍为1 .
更新testdb3组级=1,PKID=1;
跟踪调试,发现参数值不对,p2。方向=ParameterDirection.ReturnValue;,结果返回值给p1。
莫非,默认给的是第一个参数,调换p1, p2的顺序,果然正常调用:
运行结果,数据表中的行也更新完成:
Oracle.ManagedDataAccess.Client调用有返回值的函数时,cmd.Parameters.Add的第一个参数一定要是ParameterDirection.ReturnValue。不确定这是不是一个错误# 63;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。