|
TransactionScope 是.net 提供的可提升事务环境,开发软件的时候非常方便,但是在大数据量处理的时候,会莫名我出错,检查代码没有任何的错误
解决这个错误的方法:不用TransactionScope ,自己写一个用MSDTC的事务就可以了。
我的项目里面用的就是这TransactionScope ,但是在导入数据的时候,超过1万条记录(3张表)的时候,系统就报错了。数据在7000条的时候,没有任何问题。没有解决办法。
最好只好改变思路,不使用TransactionScope ,参照微软的COM+1.5的帮助,写了下面的。插入5万条记录的时候,包括从客户端传到服务器端共花了7分钟,没有任何问题。
在.net 2.0的环境下,建议大家不好用TransactionScope 。
public enum TransactionScopeOption { Suppress = TransactionOption.NotSupported, Required = TransactionOption.Required, RequiresNew = TransactionOption.RequiresNew }
public class TransactionScope : IDisposable { bool m_Consistent = false;
public void Complete() { if (m_Consistent == false) { m_Consistent = true; ContextUtil.MyTransactionVote = TransactionVote.Commit; } else { throw new InvalidOperationException("Cannot call Complete() more than once"); } } public TransactionScope() : this(TransactionScopeOption.Required) { }
public TransactionScope(TransactionScopeOption scopeOption) { ServiceConfig config = new ServiceConfig(); config.Transaction = (TransactionOption)scopeOption; ServiceDomain.Enter(config); ContextUtil.MyTransactionVote = TransactionVote.Abort; }
public void Dispose() { if (m_Consistent == false && ContextUtil.IsInTransaction) { ContextUtil.MyTransactionVote = TransactionVote.Abort; } ServiceDomain.Leave(); m_Consistent = false; } } |