【发布时间】:2020-08-23 03:04:18
【问题描述】:
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# 代码中:
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: 'Could not find specified column in results: som.id' at Line: if (reader[columnName] == DBNull.Value )
作为测试,我在调试回 Workbench 时从异常窗口复制了查询,它无需任何修改即可工作1。更简单的查询(没有连接)在我的应用程序中工作正常。我很欣赏我的代码不是最优雅的,但我无法克服上面的1。怎么可能?
谢谢
【问题讨论】:
-
结果中的列名不包含别名(前缀)。即使在您的屏幕截图中,列名也不包含“
som.”等。 -
列名是什么,
strings 是否正确传递? -
啊。这是我必须使用“as”的地方吗?
-
如果您希望它们按照数组中的方式命名,是的,您需要为列命名。
标签: c# mysql sql mysql-workbench