在我的c#项目中,我有一个MARS模式的SQL连接,多线程正在使用它执行CRUD操作。其中一些操作需要作为交易执行。在我完成数据访问模块之后,我开始测试并从其中一个选择中得到一个InvalidOperationException,声明由于连接有一个活动事务,所以select本身需要处于事务中。各地MSDN窥探我发现下面的话:多线程数据库访问
注意:当你的查询返回大量的数据,并调用的BeginTransaction,则抛出SQLException,因为使用MARS当SQL Server不允许并行事务。为避免此问题,请始终在打开任何阅读器之前将事务与命令,连接或两者关联起来。
我可以很容易地创建一个会集结命令转换事务的方法,这将甚至让我有一个计时器线程固定的间隔提交事务,但是这是正确的方式?我是否应该停止不需要事务的命令,直到提交活动事务为止?
这是Winforms,WPF,Asp.Net? –
SqlConnection不是线程安全的。甚至没有MARS。您可以使用异步IO在单个事务中实现并行性。 – usr