Access Query на C # не генерирует результаты - PullRequest
0 голосов
/ 21 мая 2018

Я использую следующий запрос Access на C # MVC, чтобы сравнить две таблицы и вернуть записи, которые попадают в диапазон дат и машину, выбранную пользователем.Код запроса отлично работает в реальной базе данных 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 голосов
/ 22 мая 2018

OleDbDataReader.NextResult() метод, используемый для перемещения между наборами результатов, если строка запроса имеет несколько наборов результатов (например, более двух операторов SELECT, не считая SELECT внутри агрегатных функций).Поскольку ваш запрос имеет один набор результатов, 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(), читатель данных перейдет к следующемунабор результатов с пустыми данными.

Проблема, связанная с данной:

Разница между SqlDataReader.Read и SqlDataReader.NextResult

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...