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;
}
}
TransactionScope事务 COM+事务 在.net中还有些也能进行事务处理,如web Service中 需要特别补充的是: 而访问数据库的客户端的配置和服务器端的稍有些差别: 在设置完上面的还有使防火墙MS DTC 服务使用网络或打开 MS DTC 端口:运行netsh firewall set allowedprogram %windir%/system32/msdtc.exe MSDTC enable命令就可以了 |