C#中如何使用数据库的本地事务?示例代码是什么?

畫卷琴夢
发布: 2025-10-30 19:05:12
原创
214人浏览过
使用C#通过IDbConnection和IDbTransaction实现数据库本地事务,以SqlConnection为例,先打开连接,调用BeginTransaction()开启事务,将事务对象传给SqlCommand执行操作,若全部成功则Commit提交,否则Rollback回滚;需确保命令关联事务、连接保持打开、妥善处理异常并及时释放资源;SQLite等其他数据库同理,仅类名不同。

c#中如何使用数据库的本地事务?示例代码是什么?

在C#中使用数据库本地事务,可以通过 ADO.NET 提供的 IDbConnectionIDbTransaction 接口来实现。以 SQL Server 为例,使用 SqlConnection 开启事务,通过 SqlTransaction 控制提交或回滚。

使用步骤说明

开启事务的基本流程如下:

  • 创建数据库连接(SqlConnection)
  • 调用 BeginTransaction() 方法启动事务
  • 将事务对象传给 SqlCommand 使用
  • 执行一个或多个数据库操作
  • 如果全部成功,调用 Commit() 提交事务
  • 如果有异常,调用 Rollback() 回滚事务

示例代码:SQL Server 本地事务

using System;
using System.Data.SqlClient;
<p>class Program
{
static void Main()
{
string connectionString = "Server=localhost;Database=TestDB;Integrated Security=true;";</p><pre class='brush:php;toolbar:false;'>    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        // 开始事务
        SqlTransaction transaction = connection.BeginTransaction();

        try
        {
            // 第一条命令:更新账户A余额
            SqlCommand cmd1 = new SqlCommand("UPDATE Accounts SET Balance = Balance - 100 WHERE Id = 1", connection, transaction);
            cmd1.ExecuteNonQuery();

            // 第二条命令:更新账户B余额
            SqlCommand cmd2 = new SqlCommand("UPDATE Accounts SET Balance = Balance + 100 WHERE Id = 2", connection, transaction);
            cmd2.ExecuteNonQuery();

            // 所有操作成功,提交事务
            transaction.Commit();
            Console.WriteLine("事务提交成功,转账完成。");
        }
        catch (Exception ex)
        {
            // 出现异常,回滚事务
            try
            {
                transaction.Rollback();
            }
            catch (Exception rollBackEx)
            {
                Console.WriteLine("事务回滚失败: " + rollBackEx.Message);
            }

            Console.WriteLine("事务执行失败: " + ex.Message);
        }
    }
}
登录后复制

}

关键点说明

以下是在使用本地事务时需要注意的地方:

阿里云-虚拟数字人
阿里云-虚拟数字人

阿里云-虚拟数字人是什么? ...

阿里云-虚拟数字人2
查看详情 阿里云-虚拟数字人
  • SqlCommand 必须指定事务:每个参与事务的命令都要传入 transaction 对象,否则不会被包含在事务中
  • 连接必须保持打开状态:事务期间数据库连接不能关闭
  • 异常处理必不可少:确保出错时能正确回滚,避免数据不一致
  • 及时释放资源:使用 using 或 try-finally 确保连接和事务被正确释放

其他数据库(如 SQLite)的类似用法

如果是 SQLite,原理相同,只是类名不同:

using (var connection = new SqliteConnection(connectionString))
{
    connection.Open();
    var transaction = connection.BeginTransaction();
<pre class='brush:php;toolbar:false;'>try
{
    using var cmd = new SqliteCommand("INSERT INTO Logs (Message) VALUES (@msg)", connection, transaction);
    cmd.Parameters.AddWithValue("@msg", "测试日志");
    cmd.ExecuteNonQuery();

    transaction.Commit();
}
catch
{
    transaction.Rollback();
    throw;
}
登录后复制

}

基本上就这些。本地事务适用于单一数据库内的操作,简单直接,是保证数据一致性的常用手段。

以上就是C#中如何使用数据库的本地事务?示例代码是什么?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号