2013-06-03 158 views
2

我想從我的數據庫中獲取記錄,這是在ms訪問中創建的2013年6月3日。日期都存儲在DD/MM/YYYY的格式,下面是我的查詢訪問mdb日期/時間問題

AND (a.Date = #" + date + "#)) order by e.E_ID asc 

但令人驚奇的是我已經插在的2013年3月6日日的記錄是今天的日期,而需要它作爲2013年3月6日,我糾正了我的區域設置,仍然是同樣的問題。同樣在我的查詢中,我正在查詢匹配日期,我正在使用dd/MM/yyyy。這是微軟的錯誤嗎?請幫助

回答

2

日期都存儲在DD/MM/YYYY

的,我懷疑他們是不是格式。我懷疑它們以某種本地日期/時間格式存儲,無疑比10個字符的字符串更有效。 (例如,假設您使用的是適當的字段類型而不是varchar)。區分數據的固有特性和「轉換爲文本時的顯示方式」很重要。

但令人驚奇的

我不認爲這是驚人的。我認爲這是不必要地使用字符串轉換的完美結果。他們幾乎總是咬你。你不是想表示一個字符串 - 你想表示一個日期。所以儘可能使用這種類型。

您應該:

  • 使用參數化的SQL的原因是多方面的查詢 - 最重要的是避免SQL注入攻擊,但避免這種
  • 的不必要的字符串轉換指定的參數值一個DateTime,從而避免了串轉換

哪個供應商類型,你正在使用您還沒有指定 - 我的猜測是OleDbConnection等等。通常,如果您查看相關命令類的Parameters屬性的文檔,您會發現一個合適的示例。例如,OleDbCommand.Parameters顯示OleDbConnection上的參數化查詢。有一兩件事值得的文檔指出:

的OLE DB .NET提供程序不支持命名參數,將參數傳遞到SQL語句或由OleDbCommand調用時CommandType設置爲Text存儲過程。在這種情況下,必須使用問號(?)佔位符。 [...] 因此,將OleDbParameter對象添加到OleDbParameterCollection的順序必須直接對應於命令文本中參數的問號佔位符的位置。

+0

毫無疑問,我得到的最佳答案.... – greatmajestics