C# Can';t解决“问题”;Sqlparameter已包含在另一个SqlparameterCollection“中;
我在windows服务中使用了两个线程(来自同一个类)。我总是收到相同的错误消息:C# Can';t解决“问题”;Sqlparameter已包含在另一个SqlparameterCollection“中;,c#,multithreading,database-connection,sqlparameter,C#,Multithreading,Database Connection,Sqlparameter,我在windows服务中使用了两个线程(来自同一个类)。我总是收到相同的错误消息: "The SqlParameter is already contained by another SqlParameterCollection. at System.Data.SqlClient.SqlParameterCollection.Validate(Int32 index, Object value) at System.Data.SqlClient.SqlParameterCollect
"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。这并不能解决问题。我愿意接受任何建议。您试图将
SqlParameter
添加到SqlParameterCollection
两次。这可能发生在线程之间,也可能不发生在线程之间
如果这是一个多线程问题,那么您的所有变量都应该在本地范围内,因为如果它们不是,您应该在它们的访问上实现同步,可能是使用锁
如果这不是并发性问题,那么可以通过对SqlParameter
变量执行“查找所有引用”来轻松确定问题
无论哪种方式,如果您发布一些代码,我们都可以为您提供更多帮助。您尝试向
SqlParameter集合添加SqlParameter
两次。这可能发生在线程之间,也可能不发生在线程之间
如果这是一个多线程问题,那么您的所有变量都应该在本地范围内,因为如果它们不是,您应该在它们的访问上实现同步,可能是使用锁
如果这不是并发性问题,那么可以通过对SqlParameter
变量执行“查找所有引用”来轻松确定问题
无论哪种方式,如果您发布一些代码,我们都可以为您提供更多帮助。不要在两个线程之间共享相同的sql对象。通过SQL使用池集合不要在两个线程之间共享相同的SQL对象。通过SQL使用池集合能否显示解决方案的代码?为什么对多个命令使用同一个SqlParameter对象?如果您没有,则表示歉意,但您收到的错误消息强烈表明您有。请尝试清除“命令参数”列表,然后添加新参数。cmd.Parameters.Clear();可以显示解决方案的代码吗?为什么对多个命令使用同一个SqlParameter对象?如果您没有,则表示歉意,但您收到的错误消息强烈表明您有。请尝试清除“命令参数”列表,然后添加新参数。cmd.Parameters.Clear();