4

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

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()));

所以这行不通,因为我基本上已经将我的日期时间转换为字符串。

我到底该怎么做?

4

2 回答 2

6

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

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

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

更多信息:如何将 DbContext.Database.SqlQuery<TElement>(sql, params) 与存储过程一起使用?EF 代码优先 CTP5

于 2012-04-16T22:11:45.043 回答
0
  1. 将日期转换为具有特定格式的字符串。
  2. 使用 SQL 代码将其转换回 sql 日期时间对象。

使用 sql server (microsoft) 时:http: //msdn.microsoft.com/en-us/library/ms187928.aspx "convert(datetime, '{0}', 103)", financialYear.EndDate.ToString("MM /dd/yyyy")

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

于 2012-04-16T22:16:25.370 回答