0

データを挿入するときに警告を下回っています。

Parallel.ForEach(user, data => Db.ExecuteQuery("insert into temptbl (userid,attflag,checktime,username)values('" +
                                                                     data.UserId + "','" + data.Flag + "','" + data.AttendanceDate + "','" +
                                                                     data.Name + "')"));

ここに画像の説明を入力

4

1 に答える 1

4

データベース接続オブジェクトはスレッドセーフではなく、複数のスレッドで同時に使用することを意図していません。

単一の接続でコードを並列化しないでください。代わりに、個別のスレッドごとに個別の接続が必要になるため、Parallel.ForEach.

これは MSDN で文書化されています。

OleDbConnection Class、スレッド セーフティ セクション (下部付近):

この型の public static (Visual Basic では共有) メンバーはすべて、スレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。

つまり、この型の静的メンバーはスレッド セーフですが、インスタンス メンバーはそうではありません。つまり、オブジェクトとしての型はスレッド セーフではありません。

于 2013-08-08T12:51:45.563 に答える