1

我在 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 循环中清除数组列表。这并不能解决问题。我愿意接受任何建议。

4

2 回答 2

2

您正在尝试将 a 添加SqlParameter到 aSqlParameterCollection两次。这可能会或可能不会跨线程发生。

如果这是一个多线程问题,那么您的所有变量都应该在本地范围内,因为如果不是,您应该在他们的访问中实现同步,可能使用lock.

如果这不是并发问题,则可以通过对变量执行Find All References轻松识别问题。SqlParameter

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

于 2011-06-09T08:32:27.130 回答
2

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

于 2011-06-09T08:59:43.530 回答