日期:2014-05-17  浏览次数:20471 次

【求助】C#中关于事物使用的疑惑
用事物的话TransactionScope 和DbTransaction 有什么区别和联系???

什么时候用TransactionScope什么时候用DbTransaction???

我看到一段linq代码中事物用的DbTransaction,但是平常的ado.net是用的TransactionScope??

各位帮忙解惑下谢谢了。。。



------解决方案--------------------
TransactionScope 这个比较复杂,支持不同种类的数据库,分布式的数据库,需要系统的服务支持。

如果需要消息中间件,还要开启相应的系统服务。

如果只是增删改查就不要用TransactionScope这么大型的东西。
------解决方案--------------------
TransactionScope 包含的代码段中都自动使用一个Transaction. 

参考下面页面中的例程
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqltransaction.aspx


DBTransaction使用的时候要赋值给SqlCommand 的Transaction
参考下面页面中的例程
http://msdn.microsoft.com/zh-cn/library/system.transactions.transactionscope(v=vs.80).aspx
------解决方案--------------------
TransactionScope是不是针对的是我包含的整个代码块,而DBTransaction使用是针对连接上数据库后的一段操作,是这个意思吗??
-----------------------
就是这样的。要保证TransactionScope 它工作,你需要做很多相应的工作,因为它支持分布式(数据、消息队列,接口往来)。

DBTransaction 是针对一个数据库连接的。

TransactionScope 只是写起来简单,真正用起来是满麻烦的。
------解决方案--------------------
如果Scope中只有单纯的一种操作的话,是简化。

例如Scope中只有Sqlconnection和Sqlcommand.并且用多个sqlcommand执行多条sql语句,这时候用TransactionScope会简单一点。