0
我正在使用下面的函數來使用fieldId列表動態地形成一個查詢。查詢是否太複雜訪問異常?
public List<CompareDesignGroup> GroupFields(List<string> fieldIdList)
{
StringBuilder sb = new StringBuilder();
foreach (string fieldId in fieldIdList)
{
sb.Append("'" + fieldId + "',");
}
string fieldList = sb.ToString().TrimEnd(',');
string queryString = "";
int i = 0;
foreach(string fieldId in fieldIdList)
{
queryString = queryString + " Select FieldID , CDGroups.Name,
CDCaption, IIF(ISNULL(Priority),99,Priority), " + i + " from Fields LEFT OUTER
JOIN CDGroups ON Fields.CDGroupID = CDGroups.CDGroupID
WHERE Fields.FieldID = '" + fieldId + "' ";
if (i < fieldIdList.Count - 1)
{
queryString = queryString + " union ";
}
i++;
}
queryString = queryString + " order by 4,5 ";
// DatReader讀取部件...
dataReader = settingsData.ReadSettingsData(queryString);
if (!dataReader.HasRows)
{
return null;
}
List<CompareDesignGroup> compareDesignGroupList = new List<CompareDesignGroup>();
while (dataReader.Read())
{
CompareDesignGroup compareDesignGroup = new CompareDesignGroup();
compareDesignGroup.CdGroup = dataReader["Name"].ToString();
compareDesignGroup.FieldId = dataReader["FieldID"].ToString();
compareDesignGroup.CdCaption = dataReader["CDCaption"].ToString();
compareDesignGroupList.Add(compareDesignGroup);
}
return compareDesignGroupList;
}
當我執行上述具有較大場元素的數目的查詢,MS Access作爲查詢是太複雜和應用停止執行引發異常。 有沒有更好的書寫上面的查詢方法? 或者有什麼辦法避免這種異常?
工會真的有必要嗎?難道你不只是在(「+ String.Join(」,「,fieldIdList)+」)「或沿着該行寫什麼Fields.FieldID? – kufi 2012-04-16 10:14:30
」fieldIdList「中有多少項? – 2012-04-16 10:27:22