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