我在c#中有一个程序,它将使用动态创建的字符串运行查询,该字符串将用作查询。
现在由于SQL注入的可能性,我想使用参数化查询来生成相同的内容。
正在查看Parameterized dynamic sql query,这主要是我想要的,但后来我希望在同一序列中有多个参数,而不是在不同的序列中。 我想要像
这样的东西(Where value in ({0}, {1}, {2}), param0 , param1, param2 )
该主题的答案是
SqlCommand cmd = new SqlCommand();
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.Append("SELECT name, memberid FROM members ");
var i = 1;
foreach (string item in keywords)
{
sqlBuilder.Append(i == 1 ? " WHERE " : " AND ");
var paramName = "@searchitem" + i.ToString();
sqlBuilder.AppendFormat(" Name LIKE {0} ", paramName);
cmd.Parameters.AddWithValue(paramName, "%" + item + "%");
i++;
}
cmd.CommandText = sqlBuilder.ToString();
如果我将此用于查询,则会产生类似
的内容where Value In param0 and value in param1 and value in param2
如果我没有弄错,那么在服务器性能方面是非常糟糕的。
那我怎么得到类似
的东西呢?sqlBuilder.AppendFormat(" Name IN {0} , {1} , {2} ", paramName0 , paramName1 , paramName2 );
用于参数化动态查询?
我尝试过的所有方法都可以编译好,但是会返回运行时错误。
似乎无法确定我做错了什么。 :( 有什么帮助吗?