ADO.NET_事务处理

来源:互联网 发布:去痘印 知乎 编辑:程序博客网 时间:2024/06/07 13:50
 事务处理是一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性
已成功地完成对一个表的操作,但是关系表尚未更新,因此,数据会出现不一致的现象
确保:成功地进行整个操作或者取消整个操作

【事务处理命令】
  • Begin: 在执行事务处理中的任何操作之前,必须使用 Begin 命令来开始事务处理
  • Commit: 在成功将所有修改都存储于数据库时,才算是提交了事务处理
  • Rollback: 由于在事务处理期间某个操作失败,而取消事务处理已做的所有修改,这时将发生回滚
【ADO.NET事务处理步骤】
  • 创建数据库连接并用Open()方法打开连接;
    SqlConnection objSqlConnection = 
        new SqlConnection("server=SQLDB; uid=sa; pwd=password; database=pubs");
    objSqlConnection.Open();
  • 使用Connection对象的BeginTransaction()方法开始事务处理,该方法将创建一个事务处理对象。
    SqlTransaction objSqlTransaction = objSqlConnection.BeginTransaction();
  • 将Command对象的Transaction属性设置为创建的事务处理对象。
    objSqlCommand.Transaction = objSqlTransaction;
  • 用Command对象执行SQL命令;
    insertCommand = "Insert into userlogin values ("g", "g");
    objSqlCommand.CommandText = insertCommand;
    objSqlCommand.ExecuteNonQuery ();
  • 如果操作过程没有错误,则提交事务处理。如果操作过程中发生错误,则回滚以完成的所有修改;
    objSqlTransaction.Commit();   //执行成功时提交数据库
    objSqlTransaction.Rollback();   //执行失败时回滚数据库
  • 关闭连接:
    objSqlConnection.Close();
private void button1_Click(object sender, System.EventArgs e){    SqlConnection conn = new SqlConnection("Data Source=192.168.2.200;uid=sa; password=;database = HaierHR");    conn.Open();    //启用事务    SqlTransaction tran = conn.BeginTransaction();    SqlCommand cmd = new SqlCommand();    cmd.Connection = conn;    cmd.Transaction = tran;    try    {        cmd.CommandText = "UPDATE HRRollMain Set TotalMember=TotalMember-100 WHERE RollID = '2005070101'";        cmd.ExecuteNonQuery();        cmd.CommandText = "UPDATE HRRollSum Set TotalSumMember=TotalSumMember+100 WHERE RollSumID = '20050701'";        cmd.ExecuteNonQuery();        tran.Commit();        MessageBox.Show("事务提交成功!");    }    catch (Exception ex)    {        tran.Rollback(); // 提交失败,回滚事务        MessageBox.Show("Error!" + ex.Message);    }}