在 c# 中使用由 "OR" 和 "Append" 分隔的两个 "In Clause" 时,')' 附近的语法不正确

Incorrect Syntax Near ')' When Using Two "In Clause" Separated by "OR" and "Append" in c#

    var cmd = new SqlCommand();
    var sql = new System.Text.StringBuilder();
    sql.Append("SELECT * FROM tbl_VSArticle WHERE ");
    sql.Append("Brand1 in (");
    int i, j;
    for (i = 0; i < brandsList.Length; i++)
    {
         cmd.Parameters.Add("@" + i, brandsList[i]);
         if (i > 0) sql.Append(", ");
         sql.Append("@" + i);
    }
    sql.Append(") OR Brand2 in (");
    for (j = i + 1; j < brandsList.Length; j++)
    {
         cmd.Parameters.Add("@" + j, brandsList[j]);
         if (j > 0) sql.Append(", ");
         sql.Append("@" + j);
    }
    sql.Append(")");

由于某些原因,在执行代码时,')' 附近出现了错误的语法。当我删除从“OR Brand2 ......”开始的后半部分和循环时,一切正常但显然不在 Brand2 中搜索。 有人可以告诉我我看不到的错误在哪里吗?谢谢。

问题是你做了 for (j = i + 1; j < brandsList.Length; j++) 但此时 i 将等于前一个 for 循环的 brandsList.Length + 1 因此这个循环将完全跳过导致 "...Brand2 in ()"

您需要使其类似于 for (j = 0; j < brandsList.Length; j++),然后对参数名称执行 "@" + (i + j) 才能使其正常工作,但这是创建参数和 sql.这两个列表不需要单独的参数,因为它们具有相同的值。

var cmd = new SqlCommand();
var namesAndValues = brandsList.Select((x,i) => new {Name = "@b" + i, Value = x});
foreach(var x in namesAndValues)
{
    cmd.Parameters.Add(x.Name, x.Value);
}

var commaParamList = string.Join(", ", namesAndValues.Select(x => x.Name));
sql = $"SELECT * FROM tbl_VSArticle WHERE Brand1 in ({commaParamList})) OR Brand2 in ({commaParamList})";