Не удается решить "Sqlparameter уже содержится в другой SqlparameterCollection" - PullRequest
0 голосов
/ 09 июня 2011

Я использую 2 потока (из одного класса) в службе Windows.Я всегда получаю одно и то же сообщение об ошибке:

"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.Я также пытался очистить списки arraylists в цикле for и for в коде.Это не решает проблему.Я открыт для любых советов.

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Не разделяйте одни и те же объекты sql между двумя потоками. Использовать коллекцию пулов по SQL

1 голос
/ 09 июня 2011

Вы пытаетесь добавить SqlParameter к SqlParameterCollection дважды. Это может происходить или не происходить в разных потоках.

Если это проблема с многопоточностью, то все ваши переменные должны быть локально ограничены, потому что, если это не так, вы должны реализовать синхронизацию при доступе к ним, вероятно, с lock.

Если это не проблема параллелизма, проблему легко определить, выполнив Найти все ссылки в переменной SqlParameter.

В любом случае мы можем помочь вам больше, если вы напишите какой-нибудь код.

...