我正在 SQL 服务器数据库上调用一个存储过程,它接受日期参数,其中 d1
、d2
是 c# DateTime
类型。我正在使用 Entity Framework 来这样做:
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')
我得到了正确的结果。请帮助..在这里让我失去理智。
最佳答案
您的日期还包括时间。要做到这一点:
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 类型。
请注意,日期字符串的格式取决于文化。您可能希望使用 .ToString() 方法手动指定 MM/dd/YYYY 格式等,以确保 SP 获得正确格式的日期。
此外,您似乎没有正确使用 Entity Framework 。 Entity Framework 对象上应该有一个名为MyProcedure的方法,您可以直接调用并传递参数。
关于c# - 使用 Entity Framework 存储过程的日期参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21887843/