此处讲的主要是Com+事务,而不是Ado.net中的事务.由于Http的无状态性,用到事务时是有一些限制的,比如Web method必须是根对象,也就是说事务的代码必须在一个方法中,而不能2个方法参与在一个事务中..
启用事务的步骤:
- 添加System.EnterpriseServices程序集的引用.
- 给WebMethod特性添加TransactionOption=TransactionOption.RequiresNew
事务提交的时机:
在方法顺利执行完后事务自动提交,包括发生了异常但是已经catch了,仍然会提交事务.
事务回滚的时机:
- 有异常发生并且未处理
- 主动回滚,通过调用ContexttUtil.SetAbort()方法来达到.
代码片段为:
public void Update()
{
SqlConnection conn= new SqlConnection(connstr);
SqlCommand cmd = new SqlCommand("delete table",conn);
try{
conn.Open();
cmd.ExecuteNonQuery();
FileStream fs =new FileStream("does not exist file",FileMode,Open);
}
catch
{
}
这样虽然打开文件时,文件不存在会产生异常,但已经catch了,所以表中的数据仍然会删掉.如果去掉catch那么表中的数据就不会被删掉,或者在catch块中加上ContextUtil.SetAbort()也会回滚事务,表中的数据也不会被删除.