【发布时间】:2012-05-01 08:22:29
【问题描述】:
我有一个用 C# 编写的多线程 TCP 服务器软件。许多线程应该从数据库中读取,我正在使用 SqlDataReader 从数据库中读取。当一个线程想要从数据库中读取时,没有问题,但是当两个或更多线程想要从数据库中读取时,这种情况就开始出现问题了。 .NET 给出了这个例外:已经有一个打开的 DataReader 与此命令关联,必须先关闭它。
如何防止错误发生?如何保护 SqlDataReader 免受多次访问?互斥锁适合这个问题吗?
【问题讨论】:
-
为什么不同的线程共享一个连接?
-
作为旁注,还有一个叫做“多个活动结果集”(MARS)的东西 - 但是,我只是为了完整性而提到这一点:更好的答案是“不共享连接”
标签: c# multithreading sqldatareader