1 // 创建一个 TransactionScope 对象,并开始事务
2 using (TransactionScope transScope = new TransactionScope())
3 {
4 try
5 {
6 // 利用SqlConnection完成从A地的帐户A中取款100操作
7 using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
8 {
9 // 打开 sqlConnection 连接,系统自动使 transScope 为轻型事务,现有一个资源
10 sqlConnection.Open();
11 // 创建一个 SqlCommand 对象
12 SqlCommand sqlCommand = sqlConnection.CreateCommand();
13 // 将帐户A的余额减去100
14 sqlCommand.CommandText =
15 "UPDATE T_Balance SET C_Amount = C_Amount - 100 WHERE C_BankAccounts = 'A'";
16 // 预执行命令,异常的预判断,处于“挂起”状态(等待事务的提交,完成数据永久地保存)
17 sqlCommand.ExecuteNonQuery();
18 // 利用OracleConnection完成从B地的帐户B中存款100操作
19 using (OracleConnection oracleConnection = new OracleConnection(oracleConnectionString))
20 {
21 // 打开 oracleConnection 连接,使 transScope 提升为完全分布式事务,现有多个资源
22 oracleConnection.Open();
23 // 创建一个 OracleCommand 对象
24 OracleCommand oracleCommand = oracleConnection.CreateCommand();
25 // 将帐户B的余额加上100
26 oracleCommand.CommandText =
27 "UPDATE T_Balance SET C_Amount = C_Amount + 100 WHERE C_BankAccounts = 'B'";
28 // 预执行命令,异常的预判断,处于“挂起”状态(等待事务的提交,完成数据永久地保存)
29 oracleCommand.ExecuteNonQuery();
30 }
31 }
32 // 事务提交,完成转帐
33 transScope.Complete();
34 }
35 catch
36 {
37 throw new Exception("转帐失败"); // 出现异常,事务自动Rollback()
38 }
39 } // using 结束