具有日期范围问题的 C# 和 MS 访问查询

本文关键字:MS 访问 查询 日期 范围 问题 | 更新日期: 2023-09-27 18:36:28

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

我的电脑是为英国设置的,但我相信 MS-SQL 查询会将查询转换为美国。 可以想象,某些日期(例如 1/11/2013 或 11/1/2013)会产生不正确的结果(对我来说)。

我一直在尝试不同的事情,结果很奇怪,所以可以对它应该如何做一些指导。 下面是当前查询的示例(以及在运行期间创建的 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#;"

任何帮助将不胜感激 - 谢谢。

具有日期范围问题的 C# 和 MS 访问查询

使用参数化查询不仅可以保护您的代码免受 SQL 注入漏洞的影响,还可以消除不得不大惊小怪地分隔值和担心区域设置问题的负担(即,"'US' vs. '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));