EF 調用oracle 存儲過程

EF是如何調用的存儲過程的,本人也是翻遍了個大網站,查閱了不少資料。終於解決了遇到的問題。sql

第一步:建立存儲過程,在這裏我就很少說了,不是文章說的重點。網站

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;

 上面執行這個存儲過程,是帶有輸出參數的。blog

第二步:調用存儲過程,並輸入參數ip

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了,能夠輸入返回參數結果值了。固然還有返回結果集的,還有帶有多個結果集的存儲過程;還處於摸索階段,請大神指點,謝謝。it

相關文章
相關標籤/搜索