SQL IN 运算符无法在 C# Winforms 中处理标量变量的多个值

SQL IN operator is not working with multiple value of scalar variable in C# Winforms

我遇到了一个问题,即 SQL IN 运算符在 C# 中无法处理标量变量的多个值,但查询在 SQL Server 2012 中有效。

这是有效的:

SELECT WorkStatus  
FROM viewWorkRequest 
WHERE WorkStatus IN ('Open', 'Closed')

但它在 C# 中不起作用

string All = "'Open','Closed'";
string sql = "SELECT WorkStatus FROM viewWorkRequest WHERE WorkStatus IN (@WorkStatus)"

using (SqlCommand cmd = new SqlCommand(sql, conn))
{
    cmd.Parameters.AddWithValue("@WorkStatus", All);
    cmd.ExecuteNonQuery();
}

提前致谢

为什么您认为第一个 SQL 起作用的事实会对第二个 SQL 产生任何影响,后者不包含 IN 子句?

每个参数只能包含一个值,并且 IN 子句中的每个值都是不同的,因此您不能为具有单个参数的 IN 子句传递多个值。如果您不知道您将拥有多少个值,那么您必须以允许可变数量参数的方式构建您的 SQL,例如

var values = new[] {"Open", "Closed"};
var sql = $"SELECT * FROM viewWorkRequest WHERE WorkStatus IN ({string.Join(", ", Enumerable.Range(0, values.Length).Select(n => "@WorkStatus" + n))})";
var command = new SqlCommand(sql, connection);

for (var i = 0; i < values.Length; i++)
{
    command.Parameters.Add("@WorkStatus" + i, SqlDbType.VarChar, 50).Value = values[i];
}