当前位置:编程学习 > C#/ASP.NET >>

哪位有经过验证的、能真正解决并发的方案、代码?

哪位有经过验证的、能真正解决并发的方案、代码?
在csdn找到的代码,经测试,并不能真正解决并发问题:
http://bbs.csdn.net/topics/300102785
public void ExeSqls(string theSql)
        {
            using (SqlCommand theCommand2 = new SqlCommand())
            {
                theConn.Open();
                SqlTransaction trans = theConn.BeginTransaction(IsolationLevel.ReadCommitted);
                try
                {
                    theCommand2.Connection = theConn;
                    theCommand2.Transaction = trans;
                    theCommand2.CommandText = theSql;
                    theCommand2.ExecuteNonQuery();
                    trans.Commit();
                    
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw new ApplicationException(ex.Message); 
                }
                finally
                {
                    theConn.Close();
                }
            }
        } --------------------编程问答-------------------- IsolationLevel.ReadCommitted隔离级别太低,不能真正做到完美的并发无错误,选IsolationLevel.Serializable就可以解决并发的问题,不过很多情况下,用IsolationLevel.Serializable之类的高隔离级别容易造成sql server内部死锁,更麻烦,而且这种死锁问题不容易分析原因和解决,

所以有时宁肯用IsolationLevel.ReadCommitted不完美的并发控制,然后容错,也不用IsolationLevel.Serializable --------------------编程问答-------------------- 不明白你说的所谓“解决并发的方案”是什么意思。如果你删除 SqlTransaction trans 这个东西,程序也能运行得完全一样。因为SQL Server数据库系统会自动为每一个会话命令启动一个隐式的事务。

另外这个代码,有一半都是画蛇添足的。除了没有必要整 trans 变量以及相关的4条语句以外,计算是写上了这4条语句,如果把你的try...catch...finally删除掉,也完全可以保证回滚自动 tran。而且还能正常地进行调试。因为当 using(){...} 结构在异常时,会自动调用 theCommand2.Dispose(),此时会自动回滚了trans。

而假设删掉 trans 以及相关的4条语句,再删除 try...catch...finally,那么当 using{} 抛出异常时,theCommand2.Dispose()时,SQL Server数据库系统也已经自动回滚了隐式的事务(因为它抛出异常给.net程序的)。

不过最主要地,还是不明白你说的什么“真正解决并发的方案”是什么东东。你到底要“解决”呢? --------------------编程问答-------------------- ,计算是写上了这4条语句,如果把你的  -->  ,就算是写上了这4条语句,如果把你的


数据库事务,是传统的关系数据库的一个重要功能点。你所谓“解决并发的问题”是指可以随便胡乱写数据库么?例如一个人给你存了100块钱,另外一个人几乎同时给你存了200块钱,那么系统最终只给你记账为余额200块钱,而可以随便地侵吞你的100块钱么?

你是要这种所谓的“并发的方案”么?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,