关闭

TransactionScope 的错误解决方法

736人阅读 评论(0) 收藏 举报

 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;
        }
    }

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1025次
    • 积分:19
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档