可以';t求解“t”;Sqlparameter已包含在另一个SqlparameterCollection中;

本文关键字:包含 另一个 SqlparameterCollection 求解 可以 Sqlparameter | 更新日期: 2023-09-27 17:58:48

我在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的新实例来解决这个问题。我还试图清除代码中for循环的和处的数组列表。这并不能解决问题。我愿意接受任何建议。

可以';t求解“t”;Sqlparameter已包含在另一个SqlparameterCollection中;

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

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

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

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

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