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:
Однако в моем 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 выше. Как такое может быть?
Спасибо