如何从 MVC 控制器调用带参数的数据库 'select' 存储过程?
How do I call a database 'select' stored procedure with parameters, from a MVC Controller?
我目前有一个控制器,它使用数据库视图中的所有行填充部分视图。
public ActionResult SearchResults()
{
return PartialView("~/Views/TransactionHistory/_SearchResults.cshtml", db.TRANSACTION_HISTORY.ToList());
}
TRANSACTION_HISTORY
是模型的名称class。以及我从中显示行的数据库视图。 db
是我的数据库上下文对象。
这是我的模型class:
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_DATE
和 TO_DATE
),并且 returns 与视图的行数完全相同(这意味着我不想使用不同的模型用于存储存储过程返回的行)。
那么如何利用控制器的 ActionResult
方法实际获取存储过程返回的结果,而不是数据库视图返回的所有行?
我知道我需要使用 [HttpPost]
来执行此操作,因为我将从我的视图(文本框条目)中为存储过程传递这些参数。
您可以使用Database property and call the stored procedure using 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();
我目前有一个控制器,它使用数据库视图中的所有行填充部分视图。
public ActionResult SearchResults()
{
return PartialView("~/Views/TransactionHistory/_SearchResults.cshtml", db.TRANSACTION_HISTORY.ToList());
}
TRANSACTION_HISTORY
是模型的名称class。以及我从中显示行的数据库视图。 db
是我的数据库上下文对象。
这是我的模型class:
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_DATE
和 TO_DATE
),并且 returns 与视图的行数完全相同(这意味着我不想使用不同的模型用于存储存储过程返回的行)。
那么如何利用控制器的 ActionResult
方法实际获取存储过程返回的结果,而不是数据库视图返回的所有行?
我知道我需要使用 [HttpPost]
来执行此操作,因为我将从我的视图(文本框条目)中为存储过程传递这些参数。
您可以使用Database property and call the stored procedure using 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();