我需要以下查詢:的SqlParameter並在聲明
createList(string commaSeparatedElements) {
...
SqlCommand query = new SqlCommand("SELECT * FROM table WHERE id IN ("+commaSeparatedElements+")");
...
}
我想使用參數化查詢來寫,所以從字符串中的每個元素進行檢查,以防止對SQL的注射。
僞代碼:
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#中存在,否則我將不得不由我自己寫呢?
編輯:感謝所有的答案。由於我儘量不使用代碼,我不明白(在過去的日子裏有太多不好的經歷),即使它們可能完美滿足我的需求,但是精簡和表值參數都是禁止的。我剛剛做了一個循環。
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)+")");
自己寫吧 –
[檢查此](http://stackoverflow.com/questions/4502821/how-do-i-translate-a-liststring-into-a-sqlparameter-for-a-sql-in-statement ) –