1 /// <summary> 2 /// SQL Server事务处理 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void btn_Tran_click(object sender, EventArgs e) 7 { 8 //------------------------------------------------------------// 9 10 SqlConnection con = new SqlConnection(server = (local); database = FreeNotes; UID = hf; Pwd = 123); 11 12 //------------------------------------------------------------// 13 14 //*** 要转钱的银行账户 15 16 //用来获取登录卡号的账户余额 17 int u1_money = GetMoney(Login.AccountNum.Tostring()); 18 19 //用来获取要转钱的金额 20 int money = Int32.Parse(this.txtMonrey.Text); 21 22 //此时获得,减去转出金额之后的AccountNum账户的余额。 23 int ul_balance = u1_money - money; 24 25 //如果要转的金额大于卡里的金额,则提示余额不足。 26 if (ul_balance < 0) 27 { 28 MessageBox.Show("账户余额不足!", "提示"); 29 } 30 //------------------------------------------------------------// 31 32 //*** 接收钱的银行账户 33 34 //获得要转入txtInAccountmoney账户的余额信息 35 int u2_money = GetMoney(txtInAccountmoney.Text.Trim()); 36 37 //此时获得的是另一个账户的余额加上即将转入金额的总计。 38 int u2_balance = u2_money + money; 39 40 41 //------------------------------------------------------------// 42 43 //SQL语句 44 45 //转出钱的SQL语句 46 string sqlIn = ""; 47 48 //转入钱的SQL语句 49 string sqlOut = ""; 50 51 //打开数据库连接 52 con.Open(); 53 54 //创建事务对象 55 SqlTransaction st = con.BeginTransaction(); 56 57 //创建账户1的SQLCommand对象 58 SqlCommand cmd1 = new SqlCommand(sqlIn, con); 59 60 //创建账户2的SQLCommand对象 61 SqlCommand cmd2 = new SqlCommand(sqlOut, con); 62 63 //把对象1添加到事务对象st中 64 cmd1.Transaction = st; 65 66 //把对象2添加到事务对象st中 67 cmd2.Transaction = st; 68 69 try 70 { 71 //返回执行的行数,以为使用的两个SQL语句,所以是二。 72 int i = cmd1.ExecuteNonQuery() + cmd2.ExecuteNonQuery(); 73 74 //判断是不是等于2,等于二就执行成功。 75 if(i != 2) 76 { 77 //不等于2,抛出异常! 78 throw new Exception(); 79 } 80 else 81 { 82 MessageBox.Show("转账成功!", "提示"); 83 } 84 } 85 catch(Exception ex) 86 { 87 st.Rollback(); 88 MessageBox.Show("转账失败!", "提示"); 89 } 90 finally 91 { 92 con.Close(); 93 } 94 }
时间: 2024-08-10 23:14:32