如何从MVC调用需要日期时间的存储过程

时间:2012-04-16 22:06:38

标签: c# entity-framework stored-procedures

我想用输入参数调用这个存储过程:

proc [dbo].[Invoice_GetHomePageInvoices] (

      @FinancialYearStartDate datetime = null
,      @FinancialYearEndDate datetime = null

麻烦这就是我通常从我的代码调用存储过程的方式是:

return _db.Database.SqlQuery<HomePageInvoice>(string.Format("EXEC Invoice_GetHomePageInvoices @FinancialYearStartDate = '{0}', @FinancialYearEndDate = '{1}'", financialYear.StartDate.ToString(), financialYear.EndDate.ToString()));

所以这不会起作用,因为我基本上将我的日期时间转换为字符串。

我该怎么办呢?

2 个答案:

答案 0 :(得分:6)

你应该使用 sql parameters ,基本上是这样的:

var startDate = new SqlParameter("FinancialYearStartDate", dateTimeValueHere);
var endDate = new SqlParameter("FinancialYearEndDate", dateTimeValueHere);

return _db.Database.SqlQuery<HomePageInvoice>("Invoice_GetHomePageInvoices", startDate, endDate);

更多信息:How to use DbContext.Database.SqlQuery<TElement>(sql, params) with stored procedure? EF Code First CTP5

答案 1 :(得分:0)

  1. 将日期转换为具有特定格式的字符串。
  2. 使用SQL代码将其转换回sql datetime对象。
  3. 使用sql server(microsoft)时: http://msdn.microsoft.com/en-us/library/ms187928.aspx “convert(datetime,'{0}',103)”,financialYear.EndDate.ToString(“MM / dd / yyyy”)

    编辑:Ropstah的方法实际上更好,这就是我以前的做法:P