一尘不染

如何将sqlparameter传递给IN()?

c#

由于某种原因,我的IN()子句的Sqlparameter无法正常工作。代码可以正常编译,如果我用实际值替换参数,查询就可以正常工作

StringBuilder sb = new StringBuilder();
            foreach (User user in UserList)
            {
                sb.Append(user.UserId + ",");
            }

            string userIds = sb.ToString();
            userIds = userIds.TrimEnd(new char[] { ',' });


SELECT userId, username 
FROM Users 
WHERE userId IN (@UserIds)

阅读 702

收藏
2020-05-19

共1个答案

一尘不染

您必须为IN子句中所需的每个值创建一个参数。

SQL需要看起来像这样:

SELECT userId, username 
FROM Users 
WHERE userId IN (@UserId1, @UserId2, @UserId3, ...)

所以,你需要创建的参数 ,并IN在第foreach循环。
这样的事情(在我脑海中,未经测试):

StringBuilder sb = new StringBuilder();
int i = 1;

foreach (User user in UserList)
{
    // IN clause
    sb.Append("@UserId" + i.ToString() + ",");

    // parameter
    YourCommand.Parameters.AddWithValue("@UserId" + i.ToString(), user.UserId);

    i++;
}
2020-05-19