2011-06-09 93 views
0

我在Windows服務中使用2個線程(來自同一個類)。我總是得到同樣的錯誤消息:無法解決「SqlParameter已被其他SqlParameterCollection包含」

"The SqlParameter is already contained by another SqlParameterCollection. 
    at System.Data.SqlClient.SqlParameterCollection.Validate(Int32 index, Object value) 
    at System.Data.SqlClient.SqlParameterCollection.Add(Object value) 
    at System.Data.SqlClient.SqlParameterCollection.Add(SqlParameter value) 
    at DataBaseLayer.SqlDataBaseLayer.FillDataSetFromProcedure(String strStoredProc, ArrayList parameterCollection) 
    at TestThread.StartThreads()" 

我試圖通過創建SqlParameters和一個ArrayList的新實例來解決問題。我還嘗試清除代碼中和for循環中的arraylist。這並不能解決問題。我願意接受任何建議。

+5

顯示一些代碼將有所幫助。 – 2011-06-09 07:47:51

+0

你能展示你的解決方案的代碼嗎? – 2011-06-09 07:48:21

+1

爲什麼針對多個命令使用相同的SqlParameter對象?如果你不是,請抱歉,但你強烈的錯誤信息表明你是。 – 2011-06-09 07:48:29

回答

1

您正在嘗試將SqlParameter添加到SqlParameterCollection兩次。這可能會或可能不會發生在線程之間。

如果這是一個多線程問題,那麼所有的變量應該在本地範圍,因爲如果他們不是你應該實現他們訪問的同步,可能與lock

如果這不是一個併發問題,通過在SqlParameter變量上執行查找所有參考文獻可以很容易地找到問題。

無論哪種方式,我們可以幫助你更多,如果你張貼一些代碼。

0

不要在2個線程之間共享相同的sql對象。通過SQL使用池集合

相關問題