我正在使用 StringBuilder 动态构建 SQL 语句。标准由用户定义,没有限制。
字符串格式没有问题,生成正常。
假设用户定义了 3 个标准。
动态格式化的字符串是:“SELECT * FROM Table WHERE (Field1 = '{0}' OR Field1 = '{1}') AND (Field2 = '{2}')”
目前我有:
StringBuilder sb = new StringBuilder();
sb.AppendFormat("SELECT * FROM Table WHERE (Field1 = '{0}' OR Field1 = '{1}') AND (Field2 = '{2}')", p[0], p[1], p[2]);
如何用循环添加参数数组?
例如:
for (int i = 0; i < p.Count; i++)
{
sb.AppendFormat("SELECT * FROM Table WHERE (Field1 = '{0}' OR Field1 = '{1}') AND (Field2 = '{2}')", p[i]);
}
谢谢。
从技术上讲,您可以使用 string.Join 将
p
集合加入到 string
中,以 ", "
作为分隔符:
sb.Append($"Field1 in ({string.Join(", ", p)})");
或
sb.AppendFormat("Field1 in ({0})", string.Join(", ", p));
我也更改了 SQL 语法:
field1 in (p1, p2, ..., pn)
而不是 field1 = p1 or field1 = p2 or ... or field1 = pn
.
但是,在构建 SQL 而不是使用参数(或绑定变量)时要小心:SQL 注入 可能是一个真正的问题。
尽管我没有使用过 string.join,但基于 Dimitry 使用单个占位符的想法,我修改了代码以将条件连接成一个字符串,如下所示。
strWhere 是根据条件动态生成的字符串。
strWhere = "(Field1 = value1 OR Field1 = value2) AND (Field2 = Value3)"
StringBuilder sqlRaw = new StringBuilder();
sqlRaw.AppendFormat("SELECT * FROM Fichas WHERE {0}", strWhere);
非常感谢 Dimitry 的帮助。