带有日期范围问题的C#和MS Access查询

时间:2013-10-22 13:50:40

标签: c# ms-access

我正在编写一个查询来在两个MS Access表(在不同的数据库中)之间传输数据。转移方面的事情很好。但是,我遇到了来自/来自日期选择(即动设置)的实际问题。

我的电脑是为英国设置的,但我相信MS-SQL查询会将查询转换为美国。您可以想象,某些日期(例如2013年1月11日或2013年1月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#;"

非常感谢任何帮助 - 谢谢。

1 个答案:

答案 0 :(得分: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));