我試圖參數化所有查詢以滿足來自Visual Studio中的PUMA漏洞掃描擴展的SQL注入發現。雖然這樣做,我運行到錯誤的標題:如何保護我的查詢:我得到SqlParameter已被另一個SqlParameterCollection包含
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)));
}
我在這裏和谷歌搜索,似乎無法找到解決我的具體情況。我嘗試過克隆參數,特別聲明它,並在使用它之後將它設置爲null,然後在使用它之前將它放入一個集合中,我甚至嘗試在參數名稱末尾添加一個隨機數,這樣每次都會有所不同,但沒有什麼,同樣的錯誤。
如何在查詢中仍然使用參數時解決這個問題?
感謝
您還沒有顯示,實際上涉及'SqlParameter'任何代碼參數。 – SLaks
是的,我有。它在我的示例代碼的最後一行。 – cheluto2
我假設它抱怨的是轉換短語減少到的任何內容,這意味着無論在這種情況下解決的tickID只能由一個查詢使用。通常我們會在重用之前看到'.Clear()'被用於這樣的事情(或者創建一組新的參數,但是我沒有完全理解這段代碼(這就是爲什麼這不是答案)。 – jdv