2013-10-22 58 views
1

我在寫兩個MS Access表(在不同的數據庫中)之間傳輸數據的查詢。事情的轉移方面很好。但是,我遇到了從/到日期選擇(即時設置)的實際問題。具有日期範圍問題的C#和MS Access查詢

我的電腦設置爲英國,但我相信MS-SQL查詢將查詢轉換爲美國。正如你可以想象的那樣,某些日期,比如2013年1月11日或2013年11月11日 - 會產生不正確的結果(對我而言)。

我一直在嘗試不同的事情,並得到奇怪的結果,所以可以對它應該完成的方式做一點指導。以下是當前查詢的示例(以及運行期間創建的SELECT部分​​)。如上所述,我已經使用其他格式(不只是.ToLongDateString):

cmd.CommandText = @"INSERT INTO [Report data] IN '" + Directory.GetCurrentDirectory() + "\\Reporting.mdb" + "' SELECT tblMain.* FROM tblMain WHERE [Start Date-Time] Between #" + monthCalendar1.SelectionStart.ToLongDateString() + " 00:00:00# AND #" + monthCalendar2.SelectionStart.ToLongDateString() + " 23:59:59#;"; 

"SELECT tblMain.* FROM tblMain WHERE [Start Date-Time] Between #01 November 2013 00:00:00# AND #01 November 2013 23:59:59#;" 

任何幫助將不勝感激 - 謝謝。

+0

請使用[參數化查詢(http://www.codinghorror.com/blog/2005/04/give-me-parameterized -sql-or-give-me-death.html)..這種字符串連接對於_SQL Injection_攻擊是開放的。 –

回答

2

不僅使用參數化查詢可以保護您的代碼免受SQL注入漏洞的攻擊,還可以消除分隔值和擔心區域設置問題的麻煩(即「US」與「UK」查詢「)。請你幫個忙,你的代碼轉換爲一些看起來更像是這樣的:

cmd.CommandText = 
    "SELECT MemberID, DonationDate FROM MemberDonations " + 
    "WHERE DonationDate Between ? And ?"; 
cmd.Parameters.AddWithValue("?", new DateTime(2013, 1, 2)); 
cmd.Parameters.AddWithValue("?", new DateTime(2013, 1, 3)); 
+0

謝謝戈德 - 非常感謝。 – AndyDB