基于VS2013/.NET4.5.1/Oracle12,ASP.NET调用PLSQL存储过程咨询
嘿,针对你在VS2013 + .NET4.5.1环境下调用Oracle12存储过程获取参数值的需求,我给你整理了两种实际项目里常用的实现方案,直接就能上手:
方案一:使用官方ODP.NET Managed Driver(推荐)
这是Oracle官方推出的纯托管驱动,不需要安装Oracle客户端,适配Oracle12非常稳定,步骤如下:
- 添加引用:在VS2013的NuGet包管理器里搜索
Oracle.ManagedDataAccess,安装对应.NET4.5.1的版本 - 编写调用代码:
using Oracle.ManagedDataAccess.Client; using System; public class OracleProcCaller { public void FetchProcParameters() { // 替换成你的Oracle连接字符串 string connString = "User Id=你的用户名;Password=你的密码;Data Source=你的Oracle实例名或EZ Connect地址(比如localhost:1521/ORCL);"; using (OracleConnection conn = new OracleConnection(connString)) { try { conn.Open(); // 创建命令对象,指定要调用的存储过程 using (OracleCommand cmd = new OracleCommand("你的存储过程名", conn)) { cmd.CommandType = System.Data.CommandType.StoredProcedure; // 1. 添加输入参数(如果存储过程需要输入参数的话) cmd.Parameters.Add("p_input_param", OracleDbType.Varchar2).Value = "测试输入值"; // 2. 添加输出参数(你要获取的目标参数值) OracleParameter outputParam = new OracleParameter("p_output_param", OracleDbType.Number); outputParam.Direction = System.Data.ParameterDirection.Output; cmd.Parameters.Add(outputParam); // 执行存储过程 cmd.ExecuteNonQuery(); // 获取输出参数的值,按需转换类型 int resultValue = Convert.ToInt32(outputParam.Value); Console.WriteLine($"获取到的参数值:{resultValue}"); // 这里就可以用拿到的值去生成数据表记录了 } } catch (Exception ex) { Console.WriteLine($"调用出错:{ex.Message}"); } } } }
方案二:使用System.Data.OracleClient(兼容旧项目)
如果你的项目已经引用了System.Data.OracleClient,也可以用这个方式,不过官方已经不再维护,仅作兼容参考:
using System.Data.OracleClient; using System; public class OldOracleProcCaller { public void GetProcParams() { string connString = "Data Source=你的Oracle实例;User Id=用户名;Password=密码;"; using (OracleConnection conn = new OracleConnection(connString)) { conn.Open(); using (OracleCommand cmd = new OracleCommand("你的存储过程名", conn)) { cmd.CommandType = System.Data.CommandType.StoredProcedure; // 输入参数 cmd.Parameters.Add("p_input", OracleType.VarChar).Value = "测试值"; // 输出参数 OracleParameter outputParam = new OracleParameter("p_output", OracleType.Int32); outputParam.Direction = System.Data.ParameterDirection.Output; cmd.Parameters.Add(outputParam); cmd.ExecuteNonQuery(); // 获取参数值 int outputValue = (int)outputParam.Value; Console.WriteLine($"输出参数值:{outputValue}"); } } } }
几个关键注意点
- 存储过程的参数名称要和代码里的完全一致,Oracle如果用双引号定义了大小写敏感的参数名,代码里也要对应写对
- 如果是输入输出参数,要把Direction设为
ParameterDirection.InputOutput,并且先给输入值赋值 - 数据类型要对应好,比如Oracle的
VARCHAR2对应OracleDbType.Varchar2,NUMBER对应OracleDbType.Number - 用ODP.NET的话,记得在配置文件里可以设置Oracle的相关参数,比如超时时间
内容的提问来源于stack exchange,提问作者Parkavi
相关产品推荐
相关产品推荐

