c# - 如何将 sqlparameter 传递给 IN()?

标签 c# sql-server ado.net

<分区>

出于某种原因,我的 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) 

最佳答案

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

SQL 需要如下所示:

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

因此您需要在foreach 循环中创建参数 IN 子句。
像这样的东西(出于我的头脑,未经测试):

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++;
}

关于c# - 如何将 sqlparameter 传递给 IN()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9384446/

相关文章:

c# - CA1008 : Enums should have zero value and Flag enums

sql-server - 从先前转换为XML的表列中提取多个值

sql - 如何从备份文件中检索数据库的逻辑文件名

c# - 由于没有 Sql Server 数组参数,最好的处理方法是什么?

c# - ASP.NET Core 2.0 禁用自动质询

c# - 从 SQL Server 更新数据网格 - 更新过程不起作用

c# - Resharper C# 格式样式在截断长行时在新行而不是同一行上显示 "new"

c# - 林克 :DataTable select does not work if column name has space in it?

c# - DbConnection 与 OleDbConnection 与 OdbcConnection

ado.net - Informix for .NET 的连接字符串