一个事务的例子

  protected void Button1_Click(object sender, EventArgs e)   
{       
     SqlConnection conn;      
    SqlCommand cmd1, cmd2;    
    SqlTransaction tra;       
    conn = new SqlConnection("server=.;database=test;uid=sa;pwd=123");       
     conn.Open();     
      tra = conn.BeginTransaction();//开始事务      
     cmd1 = new SqlCommand("update Test set StuName='佳儿' where    
     StuScore=111", conn);       
    cmd2 = new SqlCommand("update Test  set                                                                           StuName='fdsafdsafdsfdsafsfsdadsadsadfsafsfsfdf' where StuScore=222", conn);      
  try     
   {        
       cmd1.ExecuteNonQuery();//此句可以成功执行      
      cmd2.ExecuteNonQuery();//此句故意让其执行失败        
     tra.Commit();//无异常,提交事务(两句执行都有效)       
     Response.Write("<script>alert('执行成功')</script>");        }   
     catch     
   {       
     tra.Rollback();//出现异常,回滚事务(两句执行都无效)   
         Response.Write("<script>alert('执行失败')</script>");      
  }      
  finally       
 {         
   conn.Close();       
 }   
}
假设有一个电子商务网站,需要处理用户下单的事务,包括以下几个步骤: 1. 检查商品库存是否充足。 2. 扣除用户账户余额。 3. 增加商家账户余额。 4. 更新订单状态。 下面是一个简单的数据库处理事务例子: ```python import mysql.connector # 连接数据库 db = mysql.connector.connect( host="localhost", user="root", password="password", database="ecommerce" ) # 获取数据库游标 cursor = db.cursor() try: # 开始事务 db.start_transaction() # 检查商品库存是否充足 cursor.execute("SELECT stock FROM products WHERE id = %s", (product_id,)) stock = cursor.fetchone()[0] if stock < quantity: raise Exception("库存不足") # 扣除用户账户余额 cursor.execute("SELECT balance FROM accounts WHERE id = %s", (user_id,)) balance = cursor.fetchone()[0] new_balance = balance - total_price if new_balance < 0: raise Exception("余额不足") cursor.execute("UPDATE accounts SET balance = %s WHERE id = %s", (new_balance, user_id)) # 增加商家账户余额 cursor.execute("SELECT balance FROM accounts WHERE id = %s", (merchant_id,)) balance = cursor.fetchone()[0] new_balance = balance + total_price cursor.execute("UPDATE accounts SET balance = %s WHERE id = %s", (new_balance, merchant_id)) # 更新订单状态 cursor.execute("UPDATE orders SET status = 'paid' WHERE id = %s", (order_id,)) # 提交事务 db.commit() print("订单处理成功") except Exception as e: # 回滚事务 db.rollback() print("订单处理失败: ", str(e)) finally: # 关闭数据库连接 db.close() ``` 在这个例子中,我们首先连接到数据库,并获取一个游标对象。然后使用 `db.start_transaction()` 方法开始一个事务,并在事务中执行多个 SQL 语句。如果任何一个 SQL 语句出现异常,我们将回滚事务,并打印出错信息。如果所有 SQL 语句都执行成功,我们将提交事务,并打印成功信息。最后,我们关闭数据库连接。 需要注意的是,事务必须在一个连接上执行,因此我们需要在最后关闭数据库连接。另外,为了避免 SQL 注入攻击,我们使用参数化查询,将参数传递给 SQL 语句,而不是直接拼接字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值