Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保护我的查询:我得到的SqlParameter已包含在另一个SqlParameterCollection中_C#_Dbcontext_Sqlparameter - Fatal编程技术网

C# 如何保护我的查询:我得到的SqlParameter已包含在另一个SqlParameterCollection中

C# 如何保护我的查询:我得到的SqlParameter已包含在另一个SqlParameterCollection中,c#,dbcontext,sqlparameter,C#,Dbcontext,Sqlparameter,我正在尝试参数化所有查询,以满足VisualStudio中PUMA漏洞扫描扩展的SQL注入结果。在执行此操作时,我遇到了标题中的错误: SqlParameter已包含在另一个SqlParameterCollection中 这是相关代码(第二行生成错误): IEnumerable docLst=prfDao.GetUploadedDocLog(Convert.ToInt32(id)); 如果(docLst.Count()>0){/这是因为IEnumerable返回。当调用docLst.Count(

我正在尝试参数化所有查询,以满足VisualStudio中PUMA漏洞扫描扩展的SQL注入结果。在执行此操作时,我遇到了标题中的错误:

SqlParameter已包含在另一个SqlParameterCollection中

这是相关代码(第二行生成错误):

IEnumerable docLst=prfDao.GetUploadedDocLog(Convert.ToInt32(id));

如果(docLst.Count()>0){/这是因为
IEnumerable
返回。当调用
docLst.Count()
时,它会再次尝试执行-不同的执行

尝试返回
列表

MSDN:创建此对象时不会执行查询;每次枚举时都会执行查询,例如使用foreach


显然,它试图重用添加到另一个集合中的参数(以前的执行)

您没有显示任何实际涉及
SqlParameter
的代码。是的,我显示了。它在我的示例中的最后一行代码中。我假设它在抱怨转换短语缩减为的内容,这意味着在此上下文中tickID解析为的内容只能由一个查询使用。通常我们会看到
.Clear()
在重用(或创建一组新的参数,但我不完全理解这段代码)之前,是否在这些东西上使用(这就是为什么这不是答案。)这完全取决于
SqlQuery()的内容
does.T.S.我修复了它。我简化了这篇文章的查询文本,真正的查询要长得多,并且使用了StringBuilder,我无意中在上传的文本中留下了一个引用。再次感谢,这正是我需要知道的。我已经测试过它,它在作为列表返回时可以工作。没有问题。始终小心使用
IEnumerable
因为它将您带入不同执行的领域。而且
DbRawSqlQuery
也是如此
    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)));
}