今天我写了一段代码,如下:
using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
{
//执行Oracle的一些操作 ts.Complete();
}
据MSDN上说,这样可以实现隐式的分布式事务,在这个隐式事务范围内,可以实现多个不同数据库操作的事务性,看似短短的几段代码,却能实现这样的功能,不知道背后的原理是什么?
请大家不吝赐教!
using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope())
{
//执行Oracle的一些操作 ts.Complete();
}
据MSDN上说,这样可以实现隐式的分布式事务,在这个隐式事务范围内,可以实现多个不同数据库操作的事务性,看似短短的几段代码,却能实现这样的功能,不知道背后的原理是什么?
请大家不吝赐教!
解决方案 »
- 有没有一种散列集合可以添加重复的KEY
- 用lastindexof截取字符串
- C/S与B/S
- WinFrom 如何识别右键菜单是在哪个图片控件上触发右击事件的?
- 我在IE中调用Winform 连接 webserver 取值时出错,请高手看一下。请详细说一下怎么配置
- C#如何将窗体上所有的控件大小按该窗体大小的变化而相似变化。
- 点击按钮将选中文字复制到剪贴板
- 向大家致敬,帮小弟看看这个问题,谢谢!很简单的!
- .net中的菜单控件中如何在菜单项前面加上图片?
- Microsoft 靠c#必将击跨Borland
- C#里上传图片怎么以二进制直接保存到数据库
- “CsGL.OSLib”的类型初始值设定项引发异常
{
为连接创建事务
}你自己也可以测试一下,在using块内,Transaction.Current != null;在using块外,Transaction.Current == null,这种隐式事务,.Net Framework并没有做太多的事情,只是告诉应用程序,当前在事务范围内,至于具体事务,还得要驱动程序根据此判断条件进行相应的事务处理
使用TransactionScope类
在该模型中,事务的基本的ACID属性由该类的基础结构实现、事务的提交和回滚实际上都在基础结构中完成,该类中定义的Complete方法实际上仅仅是通知基础结构当前事务代码已经完成可以开始提交