从字符串中删除最后的"OR"

Urb*_*coz 3 sql vb.net string

我正在VB.net中构建一个SQL查询,并编写了一个动态执行它的例程.

我想在where子句中包含数组(未知大小)中的每个项目,如下所示:

Dim person(10) as String
Dim strSQL, strWhereClause as String
person(0) = "John"
person(1) = "Steve"
'...

For i = 0 To UBound(menuNames)
    strWhereClause &= "[name] = '" & person(i) & "' OR "
Next

strSQL= "SELECT * FROM [customers] WHERE " & strWhereClause 
Run Code Online (Sandbox Code Playgroud)

这里的问题是最后有一个额外" OR "的.有一种巧妙的方法可以删除它吗?或者也许是一起解决问题的更好方法.(我认为string.join在这种情况下不起作用,因为数组项之前和之后都有文本.)

编辑:手动删除最后三个字符,如下所示:strWhereClause = Left(strWhereClause, strWhereClause.Length - 3)很好,除了它不处理空字符串.毕竟,我不知道我的数组中有多少个元素.

ba_*_*end 9

你不应该这样做,即使你100%确定阵列中存储的内容仍然是一个坏习惯.相反,你应该熟悉使用参数化查询.


没有经过编译测试:

var sb = new StringBuilder();
sb.Append("SELECT * FROM [customers] WHERE ");

for (int i = 0; i < person.Length; ++i)
{
    var param = string.Format("NAME{0}", i);
    sb.Append(string.Format("[NAME] = @{0}{1}", param, i < person.Length - 1 ? " OR " : string.Empty));
    command.Parameters.AddWithValue(param, person[i]);  
}

var sql = sb.ToString();
Run Code Online (Sandbox Code Playgroud)

假设你是SqlCommand command.抱歉C#但我的VB太生锈了,我希望你明白这一点.;)