Проходящий параметр MySql дает другой результат - PullRequest
0 голосов
/ 14 марта 2019

У меня есть веб-сайт ASP.NET Core, и я загружаю некоторые продукты из базы данных с помощью этой команды:

using (MySqlCommand cmd = new MySqlCommand("SELECT ROBAID, KATBR, NAZIV,
                            SLIKA FROM ROBA WHERE PODGRUPAID IN (@PG)", con))
{
    cmd.Parameters.AddWithValue("@PG", "PODGRUPAID");

    // Other reading code
}

Проблема заключается в том, что в результате я получаю только первые 2 продукта (внутри MySqlDataReader внутри инспектора) но когда я изменяю командную строку на SELECT ROBAID, KATBR, NAZIV, SLIKA FROM ROBA WHERE PODGRUPAID IN (PODGRUPAID) без добавления параметра через команду, я получаю все результаты ...

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

На самом деле вы передаете PODGRUPAID как строку в определении значения этого параметра:

cmd.Parameters.AddWithValue("@PG", "PODGRUPAID");

Это приведет к тому, что будут выбраны только значения с определенным значением PODGRUPAID, и я обнаружил, что выне могу просто добавить параметры в IN предложение таким образом.Если вы хотите включить несколько значений, вы можете использовать FIND_IN_SET вместо предложения IN:

string podGrupAIDs = "value1,value2,...";

using (MySqlCommand cmd = new MySqlCommand(@"SELECT ROBAID, KATBR, NAZIV,
                            SLIKA FROM ROBA WHERE FIND_IN_SET(PODGRUPAID, @PG)", con))
{
    cmd.Parameters.AddWithValue("@PG", podGrupAIDs);

    // Other reading code
}

Если значения поступают из массива или List<T> (T = любой тип значения), вы можете присоединиться к ним с помощью string.Join() перед использованием FIND_IN_SET:

List<string> values = new List<string>() { "value1", "value2", ... };

using (MySqlCommand cmd = new MySqlCommand(@"SELECT ROBAID, KATBR, NAZIV,
                            SLIKA FROM ROBA WHERE FIND_IN_SET(PODGRUPAID, @PG)", con))
{
    cmd.Parameters.AddWithValue("@PG", string.Join(",", values));

    // Other reading code
}
0 голосов
/ 15 марта 2019

Какова стоимость ПОДГРУПАИДА?PODGRUPAID - это что-то вроде «A, B, C»?Если это так, команда будет работать больше как SELECT ROBAID, KATBR, NAZIV, SLIKA FROM ROBA WHERE PODGRUPAID = 'A, B, C' (как целая строка).Вы можете попробовать Используя разделенные запятыми строки параметров значения в предложениях SQL IN

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