C #, доступ, запрос состояния T / F и получение другой строки столбца - PullRequest
0 голосов
/ 10 сентября 2018

Вечер,

Я пытаюсь перебрать список, в котором содержится список торговых марок.На каждой итерации он вызывает запрос.Запрос пытается проверить, является ли данный столбец, названный в честь названия бренда, истинным.В этом случае добавьте значение Строка модели в первом столбце.

Самое близкое, что мне удалось получить, это то, что он будет корректно перебирать все бренды, но добавляет все модели для каждого бренда.Это имеет смысл, поскольку технически все модели имеют «истинное» значение для этого бренда, однако я не знаю простого и простого способа его фильтрации.

Я выполнил тестовый метод, в котором вместо итерации значения параметра из списка брендов, которое я жестко запрограммировал в запросе, запрос работает так, как задумано, поэтому я не понимаю, почему он не работает.Значение параметра корректно меняется с каждой итерацией.

private static void SetAPDictionary()
    {
        if (AP_BRAND_DICTIONARY == null)
        {
            AP_BRAND_DICTIONARY = new Dictionary<string, List<string>>();

            // For each Brand added into the Brand Catalog, iterate through and query for each brand and allocate accordingly into the Dictionary. 
            foreach (string brand in Root_Toolbox.BrandCatalog)
            {
                Console.WriteLine("NOW QUERYING FOR "+ brand);
                //DemoCode(brand);
                APQueryCaller(brand);
            }
        }
    }

    // TEST CODE; WORKS AS DESIRED.
    private static void DemoCode(string brand)
    {
        using (OleDbCommand cmd = new OleDbCommand(@"SELECT [Model] FROM [Copy of AP_Brand] WHERE @p1 = -1", Connection_Controller.MasterDbConnection(true)))
        {
            cmd.Parameters.AddWithValue("@p1", brand);
            OleDbDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine("DEMO ADDING " + reader.GetString(0) + " TO " + brand);
            }
        }
        Connection_Controller.MasterDbConnection(false);
    }
    // END TEST

    // TODO: FIX ME... 
    public static void APQueryCaller(string brand)
    {
        using (OleDbCommand cmd = new OleDbCommand(@"SELECT [Model] FROM [AP_Brand] WHERE @p1 = YES", Connection_Controller.MasterDbConnection(true)))
        {
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@p1", brand);

            // DEBUG 
            Console.WriteLine(cmd.CommandText);
            foreach (OleDbParameter i in cmd.Parameters)
            {
                Console.WriteLine("@p1 IS NOW: " + i.Value);
            }
            // END DEBUG


            OleDbDataReader reader = cmd.ExecuteReader();

            if (!AP_BRAND_DICTIONARY.ContainsKey(brand))
            {
                Console.WriteLine("ADDING " + brand);
                AP_BRAND_DICTIONARY.Add(brand, new List<string>());
            }

            while (reader.Read())
            {
                // If the column with the brand name is checked (true) add to the dictionary. 

            }
        }
        Connection_Controller.MasterDbConnection(false);
    }

Что касается макета базы данных.MDU должен быть единственным брендом, чтобы получить модели в своем списке.

Таблица базы данных

...