![](/img/trans.png)
[英]Problems calling a stored procedure using Entity Framework: expects parameter not supplied
[英]Date parameter using Entity Framework stored procedure
我正在 SQL 服務器數據庫上調用一個存儲過程,該過程接受 Date 參數,其中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')
我得到正確的結果。 請幫助..在這里我瘋了。
您的日期還包括時間。 要做到這一點:
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 獲得正確的格式化日期。
此外,您似乎沒有正確使用實體框架。 實體框架對象上應該有一個叫做MyProcedure的方法,可以直接調用,傳遞參數。
@JonBarker 的回答也適用於 SQLParameter,以便將 Datetime 轉換為 SQL DATE:
SqlParameter date = new SqlParameter("@p1", dateToRun.ToString("yyyyMMdd"));
_context.Database.ExecuteSqlCommand("myprocedure @p1", date);
在將值發送給參數之前,先嘗試轉換dt1
和dt2
:
dt1= Convert.ToDateTime(DateTime.Now.ToString("MM/dd/YYYY");
dt2= Convert.ToDateTime(DateTime.Now.ToString("MM/dd/YYYY");
問題:您提供的格式並不是 DB 所期望的。
解決方案:將字符串轉換為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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.