事务处理是一组数据操作,这些操作要么必须全部成功,要么必须全部失败,以保证数据的一致性和完整性
已成功地完成对一个表的操作,但是关系表尚未更新,因此,数据会出现不一致的现象
确保:成功地进行整个操作或者取消整个操作
【事务处理命令】
已成功地完成对一个表的操作,但是关系表尚未更新,因此,数据会出现不一致的现象
确保:成功地进行整个操作或者取消整个操作
【事务处理命令】
- 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);
}
}