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

在C#中使用数据库本地事务,可以通过 ADO.NET 提供的 IDbConnection、IDbTransaction 接口来实现。以 SQL Server 为例,使用 SqlConnection 开启事务,通过 SqlTransaction 控制提交或回滚。
开启事务的基本流程如下:
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);
}
}
}}
以下是在使用本地事务时需要注意的地方:
如果是 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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号