我在接受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')
我得到了正确的结果。请帮帮我。在这里忘记了。
答案 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);