使用实体框架存储过程的日期参数

kdo*_*ah3 5 c# sql datetime entity-framework

我正在 SQL Server DB 上调用一个存储过程,该存储过程接受 Date 参数,其中d1,d2是 c#DateTime类型。我正在使用实体框架来执行此操作:

context.Database.ExecuteSqlCommand("myprocedure @p1 @p2",dt1.Date,dt2.Date)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

然而,如果我简单地这样做:

context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", '1/20/2014', '1/30/2014')
Run Code Online (Sandbox Code Playgroud)

我得到了正确的结果。请帮助..我在这里疯了。

Jon*_*ker 4

您的日期还包括时间。为此:

context.Database.ExecuteSqlCommand("myprocedure @p1, @p2", '1/20/2014', '1/30/2014')
Run Code Online (Sandbox Code Playgroud)

你需要这样做:

context.Database.ExecuteSqlCommand("myprocedure @p1 @p2",dt1.Date.ToShortDateString() , dt2.Date.ToShortDateString())
Run Code Online (Sandbox Code Playgroud)

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

请注意,日期字符串的格式取决于区域性。您可能需要使用 .ToString() 方法手动指定 MM/dd/YYYY 格式等,以确保 SP 获得正确的格式化日期。


另外,您似乎没有正确使用实体框架。实体框架对象上应该有一个名为 MyProcedure 的方法,您可以直接调用该方法并传递参数。