【发布时间】:2013-11-22 10:49:03
【问题描述】:
我需要以下查询:
createList(string commaSeparatedElements) {
...
SqlCommand query = new SqlCommand("SELECT * FROM table WHERE id IN ("+commaSeparatedElements+")");
...
}
我想使用参数化查询来编写它,因此检查字符串中的每个元素以防止 Sql-Injections。
伪代码:
createList(string commaSeparatedElements) {
...
SqlParameterList elements = new SqlParameterList("@elements", SqlDbType.Int);
SqlParameterList.Values = commaSeparatedElements.split(new Char[1] {','});
SqlCommand query = new SqlCommand("SELECT * FROM table WHERE id IN (@elements)");
query.Parameters.Add(elements);
...
}
C#中是否存在类似的东西,还是我必须自己编写?
编辑:感谢所有答案。当我尽量不使用我不理解的代码时(过去几天有太多糟糕的经历),dapper 和 table-valued 参数,即使它们可能非常适合我的需求,也是禁止使用的。我刚刚做了一个循环。
string[] elements = commaSeparatedElements.split(new Char[1] {','});
StringList idParamList = new StringList();
for(int i=0;i<elements.Count;i++) {
query.Parameters.AddWithValue("@element"+i,Convert.ToInt32(elements[i]));
idParamList.Add("@element" + i);
}
SqlCommand query = new SqlCommand("SELECT * FROM table WHERE id IN ("+String.Join(",",idParamList)+")");
【问题讨论】:
标签: c# sql sql-server