使用Entity Framework存储过程的Date参数

时间:2014-02-19 17:26:36

标签: c# sql entity-framework datetime

我在接受Date参数的sql server db上调用存储过程,其中d1,d2是c#DateTime类型。我正在使用实体框架来执行此操作:

context.Database.ExecuteSqlCommand("myprocedure @p1 @p2",dt1.Date,dt2.Date)

它没有返回结果,所以我尝试了:

var p0 = new SqlParameter("p0",dt1);
p0.SqlDbType = SqlDbType.Date;
var p1= new SqlParameter("p1", dt2);
p1.SqlDbType = SqlDbType.Date;
context.Database.ExecuteSqlCommand("myprocedure @p1 @p2",p0,p1)

然而,如果我只是这样做:

context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", '1/20/2014', '1/30/2014')

我得到了正确的结果。请帮帮我。在这里忘记了。

3 个答案:

答案 0 :(得分:1)

您的日期还包括时间。要做到这一点:

context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", '1/20/2014', '1/30/2014')

你需要这样做:

context.Database.ExecuteSqlCommand("myprocedure @p1 @p2",dt1.Date.ToShortDateString() , dt2.Date.ToShortDateString())

这是因为我假设您的SP采用字符串而不是DateTime类型。

请注意,datetring的格式取决于文化。您可能希望使用.ToString()方法手动指定MM / dd / YYYY格式等,以确保SP获取正确的格式化日期。


此外,它看起来并不像您正确使用实体框架。在实体框架对象上应该有一个名为MyProcedure的方法,您可以直接调用它并传递参数。

答案 1 :(得分:-1)

首先尝试转换dt1和dt2,然后再将值发送到参数

 dt1= Convert.ToDateTime(DateTime.Now.ToString("MM/dd/YYYY");
 dt2= Convert.ToDateTime(DateTime.Now.ToString("MM/dd/YYYY");

答案 2 :(得分:-1)

问题:您提供的格式并不是数据库所期望的。

解决方案:最好将字符串转换为DateTime类型并发送。

替换它:

context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", '1/20/2014', '1/30/2014')

有了这个:

DateTime dt1=DateTime.ParseExact("1/20/2014","M/d/yyyy",CultureInfo.InvariantCulture);
DateTime dt1=DateTime.ParseExact("1/30/2014","M/d/yyyy",CultureInfo.InvariantCulture);
context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", dt1,dt2);