C# 调用存储过程和包的通用方法

最近的项目都是做信息系统的,需要频繁的与数据库进行交互。很多对数据库的操作,如多表的查询,更新,插入,以及一些数据库逻辑的判断等等,如果写成存储过程或者包的形式然后再在代码中调用会方便很多。以下是一种通用的方法,对于参数的个数类型都没什么限制,只要在赋值的时候确定即可。具体的代码如下:

View Code
 1         /// <summary>
2      /// 执行存储过程或包
3      /// </summary>
4      /// <param name="cmdText_prc">存储过程的名字或包中的过程、函数名(格式:包名.函数名)</param>
5      /// <param name="cmdParms">参数列表(可调用MakeParam生成参数)</param>
6      /// <returns>参数返回</returns>
7 public OracleParameter[] ExecuteProc(string cmdText_prc, params OracleParameter[] cmdParms)
8 {
9 DataSet dataset = new DataSet();
10 OracleCommand cmd = new OracleCommand();
11 cmd.Connection = m_conn;
12 cmd.CommandType = CommandType.StoredProcedure;
13 cmd.CommandText = cmdText_prc;
14 AddInParaValues(cmd, cmdParms);
15 try
16 {
17 cmd.ExecuteNonQuery();
18 }
19 catch (System.Exception ex)
20 {
21 cmd.Parameters["P_MSG"].Value = (Object)ex.Message;
22 }
23 OracleParameter[] parms = new OracleParameter[cmd.Parameters.Count];
24 cmd.Parameters.CopyTo(parms, 0);
25 return parms;
26 }
27
28 private void AddInParaValues(OracleCommand cmd, params OracleParameter[] cmdParms)
29 {
30 for (int i = 0; i < cmdParms.Length; i++)
31 {
32 cmd.Parameters.Add(cmdParms[i].ToString(), (Object)cmdParms[i].Value);
33 cmd.Parameters[cmdParms[i].ToString()].OracleType = cmdParms[i].OracleType;
34 cmd.Parameters[cmdParms[i].ToString()].Size = cmdParms[i].Size;
35 cmd.Parameters[cmdParms[i].ToString()].Direction = cmdParms[i].Direction;
36 }
37 }
38
39
40 /// <summary>
41     /// 生成oracle参数
42    /// </summary>
43     /// <param name="ParamName">字段名</param>
44     /// <param name="otype">数据类型</param>
45     /// <param name="direct">数据方向</param>
46     /// <param name="size">数据大小</param>
47     /// <param name="Value"></param>
48     /// <returns></returns>
49 public static OracleParameter MakeParam(string ParamName,System.Data.OracleClient.OracleType otype,
50 System.Data.ParameterDirection direct, int size, Object Value)
51 {
52 OracleParameter para = new OracleParameter(ParamName, Value);
53 para.OracleType = otype;
54 para.Direction = direct;
55 para.Size = size;
56 return para;
57 }

例程:

在包A中有个存储过程为B

B的形式为

View Code
1 create or replace procedure B
2 ( p_no varchar2,
3 p_code out pls_integer,
4 p_msg out varchar2) is

调用的方法为

View Code
1                     OracleParameter[] Parms = new OracleParameter[3];
2 Parms[0] = ConnForOracle.MakeParam("p_no", OracleType.NVarChar, ParameterDirection.Input, 3, "125");
3 Parms[1] = ConnForOracle.MakeParam("p_code", OracleType.Int32, ParameterDirection.Output, 3, 0);
4 Parms[2] = ConnForOracle.MakeParam("p_msg", OracleType.NVarChar, ParameterDirection.Output, 400, null);
5 //ConnForOracle为上面调用方法所在的类
6 Parms = ora.ExecuteProc("A.B", Parms);//ora为一个数据库连接



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值