• EF 调用oracle 存储过程


    EF是如何调用的存储过程的,本人也是翻遍了个大网站,查阅了很多资料。终于解决了遇到的问题。

    第一步:创建存储过程,在这里我就不多说了,不是文章说的重点。

    declare
    
                                           O_VOUCHER_ACT_DEDUCTIONS  integer; 
                                           O_FREE_NUMBER             integer; 
                                           O_POINT_ACT_DEDUCTIONS    integer; 
                                           O_PAYMENTMONEY            integer; 
                                          O_ERROR_MESSAGE           integer;
                                          O_PAYNUM                  integer;
       begin
       p_cust_assets(10,710201,1,2,O_VOUCHER_ACT_DEDUCTIONS, O_FREE_NUMBER, O_POINT_ACT_DEDUCTIONS, O_PAYMENTMONEY, O_ERROR_MESSAGE, O_PAYNUM);
       
       dbms_output.put_line(O_VOUCHER_ACT_DEDUCTIONS);
         dbms_output.put_line(O_FREE_NUMBER);
          dbms_output.put_line(O_POINT_ACT_DEDUCTIONS);
           dbms_output.put_line(O_PAYMENTMONEY);
            dbms_output.put_line(O_ERROR_MESSAGE);
            dbms_output.put_line(O_PAYNUM);
            
      end;
    

     上面执行这个存储过程,是带有输出参数的。

    第二步:调用存储过程,并输入参数

    public void SelectToDBProcedure()
            {
                //参数第一种写法:
                //OracleParameter vip_con_custom_id = new OracleParameter(":i_vip_con_custom_id", OracleDbType.Int32, 710201, ParameterDirection.Input);     
    
                //第二种写法:
                //OracleParameter[] parameter = new OracleParameter[10];
                //parameter[0] = new OracleParameter(":i_vip_con_custom_id", OracleDbType.Int32, 710201, ParameterDirection.Input);
    
                //第三种写法:
                OracleParameter guest_type = new OracleParameter(":i_guest_type", OracleDbType.Int32);
                guest_type.Value = 10;
                guest_type.Direction = ParameterDirection.Input;
    
                OracleParameter vip_con_custom_id = new OracleParameter(":i_vip_con_custom_id", OracleDbType.Int32);
                vip_con_custom_id.Value = 710201;
                vip_con_custom_id.Direction = ParameterDirection.Input;
    
                OracleParameter ishascustomer = new OracleParameter(":i_ishascustomer", OracleDbType.Int32);
                ishascustomer.Value = 1;
                ishascustomer.Direction = ParameterDirection.Input;
    
                OracleParameter accompany_num = new OracleParameter(":i_accompany_num", OracleDbType.Int32);
                accompany_num.Value = 2;
                accompany_num.Direction = ParameterDirection.Input;
    
                OracleParameter O_VOUCHER_ACT_DEDUCTIONS = new OracleParameter("O_VOUCHER_ACT_DEDUCTIONS",OracleDbType.Int32);
                O_VOUCHER_ACT_DEDUCTIONS.OracleDbType = OracleDbType.Int32;
                O_VOUCHER_ACT_DEDUCTIONS.Direction = ParameterDirection.Output;
    
                OracleParameter O_FREE_NUMBER = new OracleParameter("O_FREE_NUMBER", OracleDbType.Int32);
                O_FREE_NUMBER.OracleDbType = OracleDbType.Int32;
                O_FREE_NUMBER.Direction = ParameterDirection.Output;
    
                OracleParameter O_POINT_ACT_DEDUCTIONS = new OracleParameter("O_POINT_ACT_DEDUCTIONS", OracleDbType.Int32);
                O_POINT_ACT_DEDUCTIONS.OracleDbType = OracleDbType.Int32;
                O_POINT_ACT_DEDUCTIONS.Direction = ParameterDirection.Output;
    
                OracleParameter O_PAYMENTMONEY = new OracleParameter("O_PAYMENTMONEY", OracleDbType.Int32);
                O_PAYMENTMONEY.OracleDbType = OracleDbType.Int32;
                O_PAYMENTMONEY.Direction = ParameterDirection.Output;
    
                OracleParameter O_ERROR_MESSAGE = new OracleParameter("O_ERROR_MESSAGE", OracleDbType.Int32);
                O_ERROR_MESSAGE.OracleDbType = OracleDbType.Int32;
                O_ERROR_MESSAGE.Direction = ParameterDirection.Output;
    
                OracleParameter O_PAYNUM = new OracleParameter("O_PAYNUM", OracleDbType.Int32);
                O_PAYNUM.OracleDbType = OracleDbType.Int32;
                O_PAYNUM.Direction = ParameterDirection.Output;
    
                var query = _db.Database.SqlQuery<CustAssetsModel>("begin p_cust_assets (:i_guest_type,:i_vip_con_custom_id,:i_ishascustomer,:i_accompany_num,:O_VOUCHER_ACT_DEDUCTIONS,:O_FREE_NUMBER,:O_POINT_ACT_DEDUCTIONS,:O_PAYMENTMONEY,:O_ERROR_MESSAGE,:O_PAYNUM); end;",
                    guest_type, vip_con_custom_id, ishascustomer, accompany_num, O_VOUCHER_ACT_DEDUCTIONS, O_FREE_NUMBER, O_POINT_ACT_DEDUCTIONS, O_PAYMENTMONEY, O_ERROR_MESSAGE, O_PAYNUM);
    
              
                var result = query.ToList();
    
                //打印存储过程 返回参数
                Console.WriteLine("执行结果:{0}", O_PAYMENTMONEY.Value);
            }
    

     这样就OK了,可以输入返回参数结果值了。当然还有返回结果集的,还有带有多个结果集的存储过程;还处于摸索阶段,请大神指点,谢谢。

  • 相关阅读:
    浅谈PHP7新特性
    TP5与TP3.X对比
    深入源码理解Spark RDD的数据分区原理
    OpenGL的一些基础概念
    关于Spark RDD 的认识
    Ubuntu安装Cloudera Manager以及CDH5.15.2
    小甲鱼零基础汇编语言学习笔记第六章之包含多个段的程序
    小甲鱼零基础汇编语言学习笔记第五章之[BX]和loop指令
    机器学习入门之决策树算法
    机器学习的基本概念
  • 原文地址:https://www.cnblogs.com/lizichao1991/p/6867331.html
Copyright © 2020-2023  润新知