无法解决“Sqlparameter已被另一个SqlparameterCollection包含”

时间:2011-06-09 07:44:22

标签: c# multithreading database-connection sqlparameters

我在Windows服务中使用2个线程(来自同一个类)。我总是收到相同的错误消息:

"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循环中的arraylists。这并没有解决问题。我愿意接受任何建议。

2 个答案:

答案 0 :(得分:1)

您正尝试将SqlParameter添加到SqlParameterCollection两次。这可能会也可能不会在线程之间发生。

如果这是一个多线程问题,那么所有变量都应该在本地作用域,因为如果不是,你应该在他们的访问上实现同步,可能是lock

如果这不是并发问题,则应通过在SqlParameter变量上执行查找所有引用来轻松识别该问题。

无论哪种方式,如果您发布一些代码,我们都可以为您提供更多帮助。

答案 1 :(得分:1)

不要在2个线程之间共享相同的sql对象。按SQL使用池集合