Запрос MySQL работает в Workbench, но не в коде C# - PullRequest
0 голосов
/ 07 мая 2020

SQL запрос:

SELECT som.id, som.name, som.search_enabled, oc.id, oc.name
FROM option_category oc
INNER JOIN skill_option so
    on oc.id=so.option_category_id
INNER JOIN skill_option_master som
    on som.id=so.id;

Прекрасно работает в Workbench:

enter image description here

Однако в моем C# code:

List<string> listItems = getMultiColumnListFromDB(

                         "SELECT som.id, som.name, som.search_enabled, oc.id, oc.name " +
                         "FROM option_category oc " +
                         "INNER JOIN skill_option so " +
                         "   on oc.id=so.option_category_id " +
                         "INNER JOIN skill_option_master som "  +
                         "   on som.id=so.id; "

                         ,new string[] { "som.id", "som.name", "som.search_enabled", "oc.id", "oc.name" });

...

private List<string> getMultiColumnListFromDB(string query, string[] columnNames)
    {
        List<string> result = new List<string>();

        MySqlConnection con = new MySqlConnection(dbConnectionString);
        MySqlCommand cmd = new MySqlCommand(query, con);

        con.Open();

        MySqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            string strResult = "";
            foreach (string columnName in columnNames)
            {
                if (reader[columnName] == DBNull.Value) 
                    //If value is NULL, we assume yes/1
                    strResult = strResult + "1" + ";";
                else
                    strResult = strResult + reader[columnName].ToString() + ";";

            }
            result.Add(strResult.TrimEnd(';'));
        }
        return result;
    }

... Я получаю: System.IndexOutOfRangeException: 'Не удалось найти указанный столбец в результатах: som.id' в строке: if (reader [columnName] == DBNull.Value)

В качестве теста я скопировал запрос из окна исключений во время отладки обратно в Workbench, и он работал без любые модификации требуются 1 . Более простые запросы (без объединений) отлично работают в моем приложении. Я понимаю, что мой код не самый элегантный, но я не могу преодолеть 1 выше. Как такое может быть?

Спасибо

1 Ответ

0 голосов
/ 07 мая 2020

Изменен SQL запрос для псевдонима имен столбцов:

SELECT som.id as 'som.id', som.name as 'som.name', som.search_enabled as 'som.search_enabled', oc.id as 'oc.id', oc.name as 'oc.name'
FROM option_category oc
INNER JOIN skill_option so
   on oc.id=so.option_category_id
INNER JOIN skill_option_master som
   on som.id=so.id;
...