2014-09-23 60 views
2

此代碼計算日期在今天日期和今天日期+8天之間的MSSQL表中的記錄數,但不起作用;它返回值爲0,但2是正確答案。將日期添加到DateTime返回值0?

如果我將DateTime.Now.AddDays更改爲7或更低,則它應如其操作。

//Ordre klar til bestilling 
command.CommandText = "SELECT COUNT(*) from bestillinger WHERE udlevering BETWEEN @date and @dateadd"; 
command.Parameters.AddWithValue("@date", DateTime.Now.ToString("dd/MM/yyyy")); 
command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(+8).ToString("dd/MM/yyyy")); 

con.Open(); 
command.ExecuteNonQuery(); 
string result0 = command.ExecuteScalar().ToString(); 

con.Close(); 
MessageBox.Show(result0); 

if (result0 != "0") 
{ 
    bestillingToolStripMenuItem.ForeColor = System.Drawing.ColorTranslator.FromHtml("#FF1919"); 
} 
+1

嗯,也許把'+'帶出去。 – 2014-09-23 16:27:31

+6

@alykins抱歉,但事實並非如此; 「+ 8」的意思與「8」完全相同。它僅僅是多餘的,不是無效的。 – 2014-09-23 16:31:01

+0

這我不知道 - 謝謝澄清。 – alykins 2014-09-23 16:32:55

回答

12

不要將日期/時間視爲字符串。只是:

command.Parameters.AddWithValue("@date", DateTime.Now); 
command.Parameters.AddWithValue("@dateadd", DateTime.Now.AddDays(8)); 

問題很可能是日期/時間格式。

請注意,您實際上無故執行了兩次;您可以刪除command.ExecuteNonQuery()。從現在

int count = (int)command.ExecuteScalar(); 
if(count != 0) { .... } 
+0

它不起作用! – user3888775 2014-09-23 17:58:18

+2

@作爲語句幾乎沒用的用戶。怎麼了?和你期望發生的事情有什麼不同?如果你得到一個不同的數字:是什麼讓你認爲你的期望是正確的? (如果您經常將數據視爲字符串,坦白地說,源數據是非常可疑的)。什麼是列的數據類型? – 2014-09-23 18:08:38

+0

我懷疑他實際上是將日期存儲爲字符串,而不僅僅是試圖以這種方式將它們發送到sql服務器:(呃。 – 2014-09-23 21:39:55

8

七天,它仍然是九月和日期如下::

最後,不要把整數作爲字符串

30/09/2014

從現在開始的八天,現在是十月,日期看起來像這樣:

2014年1月10日

突擊測驗:不01/10/2014指10月1日或1月10日?顯然,你的意思是指10月1日,但世界的一部分(也可能是Sql Server)會在1月10日之後讀取它。

這裏的解決方案是,你不應該將日期參數作爲字符串傳遞!剛取出.ToString()通話完全可能是不足以解決它在這種情況下,但I prefer to be explicit about my database types

command.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Today; 
command.Parameters.Add("@dateadd", SqlDbType.DateTime).Value = DateTime.Today.AddDays(8); 

當然,上述修復假設你已經完成了在數據庫中理智的事情。你可能犯了個錯誤,把你的日期作爲varchar字段放在第一位。如果你這樣做了,Sql Server將你的字段作爲字符串進行比較,並且根據你的示例格式,本月初任何東西都是總是將在本月晚些時候的日期之前排序,即使在不同的月份也是如此。這意味着您的示例結束日期在您的開始日期之前來到。如果這是您的問題,則需要向表中添加新的日期列,然後編寫代碼以使用轉換後的日期值更新行。您可能需要協調此問題,修復應用程序的其他部分,這些部分插入,更新和選擇此字段。

主要課程帶走這個:永遠不要把日期當作字符串!這適用於級別的應用程序,除了表示層。