C# 查询太复杂access中出现异常?

C# 查询太复杂access中出现异常?,c#,ms-access,c#-4.0,C#,Ms Access,C# 4.0,我正在使用下面的函数使用fieldId list动态地形成一个查询 public List<CompareDesignGroup> GroupFields(List<string> fieldIdList) { StringBuilder sb = new StringBuilder(); foreach (string fieldId in fieldIdList)

我正在使用下面的函数使用fieldId list动态地形成一个查询

    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 ";
//读者阅读部分

                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会抛出一个异常,因为查询太复杂,应用程序会停止执行。 有没有更好的方法来写上面的问题?
或者有什么方法可以避免这个异常吗?

如果你看一下,你会发现And或or的数量限制在99以内,你的工会就像where子句一样工作,所以如果工会的数量大于99,意味着你列表的计数,它会抛出一个异常,但我建议尝试使用In而不是union,但如果查询的大小很大,这将不起作用,并且对您来说最好的选择是使用分页,这意味着为大小为100的列表调用它,显示结果,在表示结果时再次为下一个100项调用它等等。

union真的有必要吗?你不能在+String.Join、、fieldIdList+或类似的行中写下Fields.FieldID的位置吗?你的fieldIdList中有多少项?