Получить значения из оператора SELECT IN C# - PullRequest
0 голосов
/ 28 марта 2020

Мне нужно извлечь несколько значений из столбца с помощью инструкции SELECT.

enter image description here

MySqlConnection con = new MySqlConnection(strConn);
    MySqlCommand com = new MySqlCommand(

    SELECT meta_value
    FROM postmeta
    WHERE postID = 16 AND metakey IN (
    'SKU', 'Price', 'Amount'), con)

    con.Open();

    MySqlDataReader r = com.ExecuteReader();

    while(r.read())
    {
        prodMeta.Add(new ProductMeta
        {
            ProductSKU = r.GetString(0),
            ProductPrice = r.GetDouble(0),
            ProductAmountSold = r.GetInt16(0)
        }
    }

Я получаю только последний "ProductAmountSold" для каждого. Я предполагаю, что это как-то связано с ExecuteReader, который возвращает столбец. Я осмотрелся и не могу найти простых инструкций по получению нескольких значений из одного столбца с помощью 1 запроса.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

вам также нужно прочитать столбец metakey, чтобы узнать, как анализировать столбец meta_value

SELECT metakey, meta_value
FROM postmeta
WHERE postID = 16 AND metakey IN (
'SKU', 'Price', 'Amount'), con)

con.Open();

MySqlDataReader r = com.ExecuteReader();

while(r.read())
{
    prodMeta.Add(new ProductMeta
    {
        String type = r.GetString(0);
        if (type == "SKU")
        {
            ProductSKU = r.GetString(1);
        }
        else if (type == "PRICE")
        {
            ProductPrice = r.GetDouble(1);
        }
        else 
        {
             ProductAmountSold = r.GetInt16(1);
        }
    }
}
0 голосов
/ 28 марта 2020

Вы sql запросите выделение одного столбца. Чтобы выбрать несколько столбцов, вам необходимо обновить sql. то есть:

SELECT meta_value, price, amountSold
FROM postmeta
WHERE postID = 16 AND metakey IN (
'SKU', 'Price', 'Amount'), con)

затем увеличьте индекс, когда вы получите свое значение:

    {
        ProductSKU = r.GetString(0),
        ProductPrice = r.GetDouble(1),
        ProductAmountSold = r.GetInt16(2)
    }

Это может быть полезно: Извлечение данных с использованием DataReader

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