// 建立了两个不同的连接,连接的是不同的数据库(test和oa),conn连接将使用事务处理,conn1则不使用 SqlConnection conn = new SqlConnection( " server=.;database=test;uid=sa;pwd= " ); SqlConnection conn1 = new SqlConnection( " server=.;database=oa;uid=sa;pwd= " ); conn.Open(); conn1.Open(); SqlTransaction trans = conn.BeginTransaction(); // 开启conn连接的事务处理 SqlCommand cmd = new SqlCommand(); cmd.Connection = conn1; cmd.CommandText = " insert into DepartmentInfo values('sunjian') " ; cmd.ExecuteNonQuery(); cmd.Connection = conn; cmd.Transaction = trans; try ... { cmd.CommandText = "insert into dptInfo values('laoliao',4)";//插入语句是正常的 cmd.ExecuteNonQuery(); cmd.CommandText = "update dptInfo set id=50 where id=19";//由于ID是自动增长的,不能修改,所以会出异常,引起事务回滚,导致上面的那一条插入语句无效 cmd.ExecuteNonQuery(); trans.Commit(); } catch (Exception ex) ... { trans.Rollback();//对于conn连接的数据库操作都会被回滚,而对于conn1连接的数据库操作则不会回滚,因为conn1连接没有采用事务处理 } finally ... { conn.Close(); conn1.Close(); } // 最后的结果是oa数据库中的DepartmentInfo表中插入了一条记录,而test数据库中的dptInfo表中没有插入记录,也没有更新记录