0

我正在尝试MS Access使用C#

静态查询是 -

Select FieldID , CDGroups.CDGroupID , Priority
from Fields , CDGroups
where Fields.CDGroupID = CDGroups.CDGroupID
  and Fields.FieldID in ('f1','f2','f3')
order by Priority

我需要替换 f1,f2.. FieldIDfieldIdList(List<string> fieldIdList)包含所有这些字段

我该怎么办?

4

4 回答 4

1

正确的方法是使用 SQL 参数。
为此,您需要遍历列表并为每个列表项创建一个参数 - 在 SQL 字符串查询的 SQL 参数列表中。

看看这个对类似问题的回答:
如何将 sqlparameter 传递给 IN()?

于 2012-04-06T12:57:14.337 回答
0
 var listId= string.Join(",", fieldIdList.Select(m => string.Format("'{0}'", m)));;

然后

"Field.FieldID in (" + listId+ ")
于 2012-04-06T12:50:30.093 回答
0

我使用了以下代码:

 StringBuilder sb = new StringBuilder();

                foreach (string fieldId in fieldIdList)
                {
                    sb.Append("'" + fieldId + "',");
                }

                string fieldList = sb.ToString().TrimEnd(',');

                string queryString =
                    "Select FieldID , CDGroups.CDGroupID , Priority from Fields , CDGroups where Fields.CDGroupID = CDGroups.CDGroupID and Fields.FieldID in (" + fieldList + ") order by Priority";
于 2012-04-06T13:12:58.283 回答
0

试试这个查询 -

SELECT CDGroupID FROM fields
  WHERE FieldID IN ('f1', 'f2', 'f3')
  GROUP BY CDGroupID
  HAVING(COUNT(DISTINCT FieldID)) >= 3

它将显示至少具有“f1”、“f2”和“f3”的 CDGroupID 列表。如果您想显示只有 'f1'、'f2' 和 'f3' 的那些,则将 WHERE 条件更改为 'HAVING(COUNT(DISTINCT FieldID)) >= 3'。

于 2012-04-06T14:23:19.117 回答