Я пытаюсь параметризовать все запросы, чтобы удовлетворить результаты SQL-инъекций из расширения сканирования уязвимостей PUMA в Visual Studio. При этом я сталкиваюсь с ошибкой в заголовке:
SqlParameter уже содержится в другой коллекции SqlParameterCollection.
Это соответствующий код (вторая строка генерирует ошибку):
IEnumerable<UploadedDocsClass> docLst = prfDao.GetUploadedDocLog(Convert.ToInt32(id));
if (docLst.Count() > 0){ //<-- this is where the error is thrown
...
}
public IEnumerable<UploadedDocsClass> GetUploadedDocLog(int tickId)
{
string s = "SELECT * FROM MyTable WHERE [request_id] = @tickId ";
MyDataBaseContext accCon = new MyDataBaseContext();
return accCon.Database.SqlQuery<UploadedDocsClass>(s, new SqlParameter("@tickId", Convert.ToString(tickId)));
}
Я искал здесь и в Google и не могу найти решение для моей конкретной ситуации. Я пробовал клонировать параметр, объявив его специально и установив для него значение null после его использования, поместив его в коллекцию перед его использованием, я даже пытался добавить случайное число в конце имени параметра, чтобы оно каждый раз было другим, но ничего, та же ошибка.
Как я могу решить эту проблему, все еще используя параметр в запросе?
Спасибо
SqlParameter
. - person SLaks   schedule 25.09.2017.Clear()
используется в таких вещах перед повторным использованием (или созданием нового набора параметров, но я не полностью понимаю этот код (поэтому это не ответ). - person   schedule 25.09.2017SqlQuery()
. - person SLaks   schedule 25.09.2017IEnumerable<UploadedDocsClass>
вернулся? затем он пытается выполнить снова? Попробуйте вернутьList<T>
- person T.S.   schedule 25.09.2017