You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中查询Access数据库日期区间数据无结果的问题

解决Access数据库日期区间查询无结果的问题

嘿,我来帮你搞定这个查询没结果的问题!你遇到的核心问题其实是Access SQL对日期常量的语法要求,还有可能的日期格式/字段类型问题,我一步步给你拆解:

1. Access日期常量的正确写法

Access的SQL里,日期值不能用单引号'包裹——单引号是给字符串用的!正确的做法是用**井号#**来标记日期常量。你之前的语句用了单引号,Access会把这些日期当成字符串来比较,而不是日期类型,自然匹配不到正确的结果。

修正后的两条SQL应该是这样:

大于/小于的写法

SELECT *
FROM tbl_daryaft
WHERE (date1 > #1396/12/1#) AND (date1 < #1396/12/25#)

BETWEEN的写法

SELECT *
FROM tbl_daryaft
WHERE date1 BETWEEN #1396/12/1# AND #1396/12/25#

2. 更可靠的方案:C#中使用参数化查询

直接写硬编码的日期字符串容易踩格式坑,而且还有SQL注入风险。在C#里用参数化查询是更稳妥的做法,数据库会自动处理日期类型的转换,不用纠结符号和格式:

using System.Data.OleDb;
using System.Globalization;

// 假设你的Access连接字符串
string connString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourDatabase.accdb;";
string sql = "SELECT * FROM tbl_daryaft WHERE date1 > @StartDate AND date1 < @EndDate";

using (OleDbConnection conn = new OleDbConnection(connString))
{
    conn.Open();
    using (OleDbCommand cmd = new OleDbCommand(sql, conn))
    {
        // 用波斯历创建DateTime对象
        PersianCalendar persianCal = new PersianCalendar();
        DateTime startDate = persianCal.ToDateTime(1396, 12, 1, 0, 0, 0, 0);
        DateTime endDate = persianCal.ToDateTime(1396, 12, 25, 0, 0, 0, 0);

        // 添加参数
        cmd.Parameters.AddWithValue("@StartDate", startDate);
        cmd.Parameters.AddWithValue("@EndDate", endDate);

        // 执行查询并处理结果
        using (OleDbDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                // 读取数据,比如 reader["date1"] 等
            }
        }
    }
}

3. 额外排查点

如果改了语法还是没结果,你可以检查这两点:

  • 字段类型:确认date1字段是Access里的「日期/时间」类型,而不是「文本」类型。如果是文本,字符串比较的规则和日期完全不同,比如'1396/12/5'会比'1396/12/10'大,因为字符串是按字符逐个比的。
  • 日期格式一致性:如果字段确实是文本类型(不推荐),要确保你查询的日期格式和存储的完全一致,比如存储的是'1396-12-01',你用'1396/12/1'就匹配不上。

内容的提问来源于stack exchange,提问作者AmirMohamamd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:16:47