如何从MVC控制器调用带参数的数据库“select”存储过程?

时间:2017-01-22 22:33:04

标签: asp.net-mvc stored-procedures asp.net-mvc-controller

我目前有一个控制器,它使用数据库视图中的所有行填充局部视图。

public ActionResult SearchResults()
{
    return PartialView("~/Views/TransactionHistory/_SearchResults.cshtml", db.TRANSACTION_HISTORY.ToList());
}

TRANSACTION_HISTORY是模型类的名称。以及我正在显示行的数据库视图。 db是我的数据库上下文对象。

这是我的模特课:

namespace TransactionHistory.Models
{
    using System;
    using System.Collections.Generic;

    public partial class TRANSACTION_HISTORY
    {
        public int INTERFACE_RECORD_ID { get; set; }
        public string COMPANY { get; set; }
        public string Status { get; set; }
        public string Carrier { get; set; }
        public string Service { get; set; }
        public string Connote { get; set; }
        public string Order_Type { get; set; }
        public Nullable<decimal> Volume { get; set; }
        public Nullable<decimal> Weight { get; set; }
        public string State { get; set; }
        public string Post_Code { get; set; }
        public string Suburb { get; set; }
        public string Zone { get; set; }
        public string Book_In { get; set; }
        public string Deliver_From { get; set; }
        public string Deliver_To { get; set; }
        public string Trpt_Special_Instructions { get; set; }
        public Nullable<System.DateTime> Date_Created { get; set; }
        public Nullable<System.DateTime> From_Date { get; set; }
        public Nullable<System.DateTime> To_Date { get; set; }
        public string Picklist { get; set; }
    }
}

现在,我有一个对此视图进行操作的存储过程,名为TRANSACTION_HISTORY_SEARCH。现在,它在where子句中接受2个参数(FROM_DATETO_DATE),并返回与视图完全相同的行数(这意味着我不想使用不同的模型来存储行由存储过程返回)。

那么如何利用控制器的ActionResult方法实际获取存储过程返回的结果,而不是数据库视图返回的所有行?

我确实理解我需要使用[HttpPost]来执行此操作,因为我将从我的视图(文本框条目)传递存储过程的这些参数。

1 个答案:

答案 0 :(得分:0)

您可以使用Database属性并使用SqlQuery调用存储过程。
这样的事情:

 List<TRANSACTION_HISTORY> res;

 res = db.TRANSACTION_HISTORY
         .Database
         .SqlQuery<TRANSACTION_HISTORY>("TRANSACTION_HISTORY_SEARCH @FROM_DATE, @TO_DATE",
                                        new SqlParameter("@FROM_DATE", fromDate),
                                        new SqlParameter("@TO_DATE",   toDate))
         .ToList();