簡體   English   中英

使用實體框架存儲過程的日期參數

[英]Date parameter using Entity Framework stored procedure

我正在 SQL 服務器數據庫上調用一個存儲過程,該過程接受 Date 參數,其中d1d2是 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);

在將值發送給參數之前,先嘗試轉換dt1dt2

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM