事务是一组组合成逻辑工作单元的操作,虽然系统中可能会出错,但事务将控制和维护事务中每个操作的一致性和完整性。
例如,在将资金从一个帐户转移到另一个帐户的银行应用中,一个帐户将一定的金额贷记到一个数据库表中,同时另一个帐户将相同的金额借记到另一个数据库表中。由于计算机可能会因停电、网络中断等而出现故障,因此有可能更新了一个表中的行,但没有更新另一个表中的行。如果数据库支持事务,则可以将数据库操作组成一个事务,以防止因这些事件而使数据库出现不一致。如果事务中的某个点发生故障,则所有更新都可以回滚到事务开始之前的状态。如果没有发生故障,则通过以完成状态提交事务来完成更新。
在 ADO.NET 中,可以使用 Connection 和 Transaction 对象来控制事务。可以使用 Connection.BeginTransaction 启动本地事务。一旦开始一个事务,就可以使用 Command 对象的 Transaction 属性在该事务中登记命令。然后,可以根据事务组件的成功或失败情况,使用 Transaction 对象提交或回滚在数据源中所做的修改。
还可以使用 Connection.EnlistDistributedTransaction 在现有的分布式事务中登记。在现有的分布式事务中登记可以确保当提交或回滚整个分布式事务时,也提交或回滚对数据源所作的代码修改。
ASP.NET2.0中提供事务的处理,下面是一个简单的例子:
SqlConnection myconn;
myconn = new SqlConnection(ConfigurationManager.ConnectionStrings["Myconnstring"].ConnectionString);
myconn.Open();
// 启动一个事务
SqlTransaction myTrans = myconn.BeginTransaction();
SqlCommand myCommand = new SqlCommand();
myCommand.Connection=myconn;
// 为事务创建一个命令
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = "DELETE FROM [JLQJJD] WHERE [JLQJID] = " + ((LinkButton)sender).CommandArgument.ToString();
myCommand.ExecuteNonQuery();
myCommand.CommandText = "DELETE FROM [JLQJ] WHERE [JLQJID] = " + ((LinkButton)sender).CommandArgument.ToString();
myCommand.ExecuteNonQuery();
//事务完成
myTrans.Commit();
}
catch (Exception ex)
{
//事务回滚
myTrans.Rollback();
}
finally
{
myconn.Close();
}
![](http://www.nextsoft.cn/images/nextsoft-ligth.png)