我需要以下查询:
createList(string commaSeparatedElements) {
...
SqlCommand query = new SqlCommand("SELECT * FROM table WHERE id IN ("+commaSeparatedElements+")");
...
}
Run Code Online (Sandbox Code Playgroud)
我想使用参数化查询来编写它,因此检查字符串中的每个元素以防止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);
...
}
Run Code Online (Sandbox Code Playgroud)
C#中是否存在类似的内容,或者我必须自己编写?
编辑:谢谢你的所有答案.当我尽量不使用代码时,我不理解(在过去的日子里有太多不好的经历),精巧和表值参数,即使它们可能完全满足我的需求,也是禁止的.我刚做了一个循环.
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 …Run Code Online (Sandbox Code Playgroud) 我想在这里做一些simulair:如何在不重复声明的"INSERT INTO dbo.Blah"部分的情况下插入多行? 除了在一个查询中执行此操作(快于几十个)之外,我还想在输入来自Web时进行参数化.
目前我有
foreach(string data in Scraper){
SqlConnection conn = new SqlConnection(WebConfigurationManager.AppSettings["ConnectionInfo"].ToString());
string query = "INSERT INTO DATABASE('web',@data)";
SqlCommand sqlCommand= new SqlCommand(query, conn);
sqlCommand.Parameters.AddWithValue("@data", data);
Command.executeNonQuery();
conn.close();
}
Run Code Online (Sandbox Code Playgroud)
这有点笨拙(注意真实的例子有更多的colums但这会让事情更加混乱).