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

2 つのスレッド間で同じ SQL オブジェクトを共有しないでください。プール コレクションを SQL で使用する

于 2011-06-09T08:59:43.530 に答える
2

SqlParameteraを a にSqlParameterCollection2 回追加しようとしています。これは、スレッド間で発生する場合と発生しない場合があります。

これがマルチスレッドの問題である場合は、すべての変数をローカルにスコープする必要があります。そうでない場合は、おそらくlock.

これが同時実行の問題でない場合、変数ですべての参照を検索することで問題を簡単に特定できSqlParameterます。

いずれにせよ、コードを投稿していただければ、さらにお手伝いできます。

于 2011-06-09T08:32:27.130 に答える