System.Transactions
最先了解事务是在MSSQL中.
通常处理多个SQL语句,为了保证全部完成,采用事务运行的方式.
运用SQL的事务处理,如果出现错误,事务回滚,恢复到原来状态(Failure Recovery).
现在微软提供这么一个空间帮助我们更简单的,更有效率的建立我们的事务程序.
那么什么是事务呢?
比如:
我先导入一条数据,接着发送一封邮件给其他人.
这样分解开来:
1.导入数据
2.发送邮件.
那么我申明一个事务范围:
using (TransactionScope scope = new TransactionScope())
{
try
{
//some code to do something
sql.add();
mail.send();
}
catch (Exception ex)
{
//
}
scope.Complete();
}
这样,当所有的事务范围类的动作全部正确完成,则事务全部完成,否则,所有动作进行回滚.{
try
{
//some code to do something
sql.add();
mail.send();
}
catch (Exception ex)
{
//
}
scope.Complete();
}
这样好像给我们一个错觉,什么动作都可以放在事务中么?出错都会回滚么?
不是这样的,必须由资源控制器来完成状态记录和出错后的状态恢复.
在这个例子中:
MSSQL就是资源控制者(Resource Manager),邮件服务器则是另一个Resource Manager.
实际上邮件本身是不支持事务,因此要定义它的Resource Manager,怎么做它的失败恢复呢?
发了错误的邮件,那么只有再发一封邮件来说前一封是错误的,再把正确的信息发出去.
至于,Resource Manager是如何跟Resouce 关联上来的,我还没有搞清楚.
注意的是需要添加System.Transactions.dll才会出现新的命名空间.
操作系统平台需要windows 2000以上支持.
阅读文章:
Transaction 概要
http://msdn2.microsoft.com/en-us/library/system.transactions.aspx
完成一个资源控制器
http://msdn2.microsoft.com/en-us/library/ms229975.aspx
使用事务范围完成一个隐含的事务
http://msdn2.microsoft.com/en-us/library/ms172152.aspx