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

C# MVC中Access查询无结果问题排查求助

排查C# MVC中Access查询无结果的问题

先看你代码里最核心的错误——读取数据的逻辑用错了:你用了while (reader.NextResult()),但这个方法是用来切换到下一个结果集(比如一次执行多个SELECT语句时),而你的查询只有一个结果集,应该用reader.Read()来逐行读取记录。这直接导致你的sheets列表一直是空的,所以视图没有数据。

修正后的核心代码

同时我帮你优化了SQL注入风险和日期格式问题(参数化查询更安全也更可靠):

public ActionResult MissingChecksheets(string startDate, string endDate, string machine)
{
    var sheets = new List<Checksheet>();
    // 明确指定需要的列,比*更高效,也避免列顺序变化导致的问题
    var query = @"SELECT [Order Item], [PartNum]
                  FROM [TrackingLog] 
                  WHERE [TrackingLog].[Workcenter] = ? 
                    AND [TrackingLog].[Complete Date] > ? 
                    AND [TrackingLog].[Complete Date] < ? 
                    AND [TrackingLog].[Order Item] NOT IN (SELECT [OrderNum] FROM [dbo_Checksheet])";

    using (var con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Checksheets.accdb;"))
    {
        using (var command = new OleDbCommand(query, con))
        {
            // OleDb参数是按顺序匹配的,注意和查询里的?顺序对应
            command.Parameters.AddWithValue("@machine", machine);
            // 先把字符串日期转成DateTime,避免格式不兼容问题
            if (!DateTime.TryParse(startDate, out DateTime startDt) || !DateTime.TryParse(endDate, out DateTime endDt))
            {
                // 处理日期格式错误的情况,比如返回空列表或提示
                return PartialView(sheets);
            }
            command.Parameters.AddWithValue("@startDate", startDt);
            command.Parameters.AddWithValue("@endDate", endDt);

            con.Open();
            using (var reader = command.ExecuteReader())
            {
                // 用reader.Read()逐行读取单结果集的记录
                while (reader.Read())
                {
                    sheets.Add(new Checksheet 
                    { 
                        OrderNum = reader["Order Item"].ToString(), 
                        PartNum = reader["PartNum"].ToString()
                    });
                }
            }
        }
    }
    return PartialView(sheets);
}

其他需要排查的细节

  • 权限问题:确认你的应用程序池身份对C:\Checksheets.accdb文件有读写权限,有时候路径正确但权限不足会导致查询无响应或返回空。
  • 列名匹配:确保TrackingLog表里的PartNum列名正确,以及Checksheet类的属性和查询返回的列对应。
  • 查询逻辑验证:可以把替换了参数值的SQL放到Access里重新测试,确认确实有符合条件的记录返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:05