Vb.net 如何使用参数数目可变的IN运算符?

Vb.net 如何使用参数数目可变的IN运算符?,vb.net,dataset,Vb.net,Dataset,我有一个到MS Access数据库的数据集连接 我想在WHERE子句中使用IN运算符,如: WHERE DepartmentID IN (1,2,3) 这意味着将筛选ID为1、2和3的所有记录。但问题是我无法创建如下参数: WHERE DepartmentID IN (?) 它仅适用于中的WHERE DepartmentID(?,?)。这是可以的,但参数不应仅限于3个参数 in运算符中的值可以是1个或多个值 如何在VB.NET中执行此操作?in运算符允许您在WHERE子句中指定多个值 语法上

我有一个到MS Access数据库的数据集连接

我想在WHERE子句中使用IN运算符,如:

WHERE DepartmentID IN (1,2,3)
这意味着将筛选ID为1、2和3的所有记录。但问题是我无法创建如下参数:

WHERE DepartmentID IN (?)
它仅适用于中的WHERE DepartmentID(?,?)。这是可以的,但参数不应仅限于3个参数

in运算符中的值可以是1个或多个值


如何在VB.NET中执行此操作?

in运算符允许您在WHERE子句中指定多个值

语法上的SQL

SELECT column_name(s)
FROM table_name
WHERE column_name IN (@value1,@value2,...)

你可以做一个循环,但是你会倾向于SQL注入

我很确定这是一个重复的循环(但不是当前链接的循环…这是更特定于语言的循环)。在任何情况下,诀窍都是根据参数的计数动态生成
(?,…?)
(此处不要输入任何数据!),然后向查询中添加相同数量的参数。(这是可扩展的,可以防止注入攻击。),第二个答案它与@pst建议的解决方案非常相似。@DanAndrews找到了一个重复的SO问题吗?:)然后我们可以合法地结束这个问题。我不认为这是重复的,因为我要求ms access作为数据库。-1您可以使用in运算符只传递一个值。除此之外,您没有解释如何在VB.NET的子句中参数化
。为什么循环容易发生SQL注入?只有在不使用参数的情况下,而不是在以编程方式(例如,在循环中)构建这些参数的情况下,您才会对SQL注入开放。这将是一件棘手的事情。他询问的子句中的参数不是固定的,可能是10、5或2。。在我的情况下,我想不出生成参数的方法。