关于.net 编程中各种事务的实现

本文介绍了事务处理技术的发展历程,从早期基于SQL的数据库事务到利用ADO.NET实现事务控制,再到解决跨数据库服务器事务问题的分布式事务。文中详细展示了不同场景下事务处理的具体实现方式,并对比了各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据库事务

在很早的以前,我们要实现一个事务通常是基于SQL的数据库事务,一般的通过SQL查询语言来实现,如下所示,同时更新两本书的价格:

BEGIN TRANSACTION  
UPDATE tb_Book SET Price=122 WHERE IDENT_CURRENT=1001
UPDATE tb_Book SET Price=88 WHERE IDENT_CURRENT=1002
IF @@ERROR <> 0   
BEGIN 
    ROLLBACK TRANSACTION  
END 
ELSE
    COMMIT TRANSACTION
2.ADO.NET事务

随着.NET技术的不断发展,可通过ADO.NET来实现,这样我们可以将事务更好的应用在业务逻辑中,而非数据库存储中,这样能够更好的实现业务和存储分离,使的事务被业务逻辑所控制,数据库专注于数据存储,达到各负其责的作用,在ADO.NET中事务的写法是:

using (DbTransaction transaction = connection.BeginTransaction())
{
    command.Transaction = transaction;
    try
    {
        command.ExecuteNonQuery();
        transaction.Commit();
    }
    catch (Exception e)
    {
        transaction.Rollback();
        throw;
    }
}

3.分布式事务
上面的代码只能基于同一个数据库连接进行,后来为了实现远程多个数据库的事务,提出了分布式事务,夸数据库服务器进行事务关联:

using (TransactionScope transactionScope = new TransactionScope())
{
    //操作数据库服务器1中的数据库
    using (SqlConnection connection = new SqlConnection(connectionString1))
    {
        SqlCommand command = new SqlCommand(commandText1, connection);
        connection.Open();
        command.ExecuteNonQuery();
        connection.Close();
    }

    //操作数据库服务器2中的数据库
    using (SqlConnection connection = new SqlConnection(connectionString2))
    {
        SqlCommand command = new SqlCommand(commandText2, connection);
        connection.Open();
        command.ExecuteNonQuery();
        connection.Close();
    }

    transactionScope.Complete();
}

使用TransactionScope的优点:
自动将本地事务升级为分布式事务:前提是你有不止一个连接到给定数据库或要组合一个连接到另一个数据库连接到同一事务(注意:你必须启动MSDTC服务以支持分布式事务)。
易于编程。如果你更希望淡化对事务的关注,而非显示操作事务,使用TransactionScope将是一个更合适的选择。

transactionScope使用

原文:https://blog.youkuaiyun.com/lxrj2008/article/details/73742105

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值