1

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

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

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

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

4

1 回答 1

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));
于 2013-10-22T14:08:34.397 回答