C#上的访问查询不生成结果

时间:2018-05-21 19:00:09

标签: c# html asp.net-mvc ms-access

我在C#MVC上使用以下Access查询来比较两个表并返回属于用户选择的日期范围和机器的记录。查询代码在实际的Access数据库上运行完美,但我想连接字符串和返回结果的代码有问题。我不确定代码有什么问题,如果有人能帮我确定错误,我将不胜感激。谢谢!

C#MVC控制器代码:

    public ActionResult MissingChecksheets(string startDate, string endDate, string machine)
    {
        var query = $@"SELECT * FROM [TrackingLog]
                       WHERE [TrackingLog].[Workcenter] = '{machine}' AND 
                             [TrackingLog].[Complete Date] > #{startDate}# AND
                             [TrackingLog].[Complete Date] < #{endDate}# AND
                             [TrackingLog].[Order Item] NOT IN (SELECT [OrderNum] FROM [dbo_Checksheet])";

        var sheets = new List<Checksheet>();

        using (var con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Checksheets.accdb;"))
        {
            using (var command = new OleDbCommand(query, con))
            {
                con.Open();

                using (var reader = command.ExecuteReader())
                {
                    while (reader.NextResult())
                    {
                        sheets.Add(new FabChecksheet
                        {
                            OrderNum = reader.GetString(0),
                            PartNum = reader.GetString(1)
                        });
                    }
                }
            }

        }

        return PartialView(sheets);
    }

1 个答案:

答案 0 :(得分:1)

如果查询字符串具有多个结果集(例如,多于两个SELECT语句,而不计算聚合函数内的SELECT),则用于在结果集之间移动的

OleDbDataReader.NextResult()方法。由于您的查询具有单个结果集,因此必须使用OleDbDataReader.Read()在记录之间移动:

using (var con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Checksheets.accdb;"))
{
    using (var command = new OleDbCommand(query, con))
    {
        con.Open();

        using (var reader = command.ExecuteReader())
        {
            // Only single result set, use 'Read' here
            while (reader.Read())
            {
                sheets.Add(new FabChecksheet
                {
                    OrderNum = reader.GetString(0),
                    PartNum = reader.GetString(1)
                });
            }
        }
    }
}

请注意,如果使用NextResult(),数据阅读器将移至下一个包含空数据的结果集。

相关问题:

Difference between SqlDataReader.Read and SqlDataReader.NextResult