在ADO.NET中,事务是一组一起执行的数据库操作,这些操作要么全部成功,要么全部失败。这确保了数据库的一致性和完整性。ADO.NET提供了SqlTransaction类来支持事务处理。
以下是一个使用C#和ADO.NET进行事务处理的示例:
csharp代码
using System; |
|
using System.Data; |
|
using System.Data.SqlClient; |
|
class Program |
|
{ |
|
static string connectionString = "Data Source=你的服务器名;Initial Catalog=你的数据库名;Integrated Security=True"; |
|
static void Main() |
|
{ |
|
SqlConnection connection = null; |
|
SqlTransaction transaction = null; |
|
try |
|
{ |
|
// 建立数据库连接 |
|
connection = new SqlConnection(connectionString); |
|
connection.Open(); |
|
// 开始事务 |
|
transaction = connection.BeginTransaction(); |
|
// 创建SqlCommand对象,并设置其Transaction属性 |
|
using (SqlCommand command1 = new SqlCommand("UPDATE YourTable SET Column1 = 'Value1' WHERE Condition1", connection, transaction)) |
|
{ |
|
command1.ExecuteNonQuery(); |
|
} |
|
// 另一个数据库操作 |
|
using (SqlCommand command2 = new SqlCommand("UPDATE YourTable SET Column2 = 'Value2' WHERE Condition2", connection, transaction)) |
|
{ |
|
command2.ExecuteNonQuery(); |
|
} |
|
// 如果所有操作都成功,则提交事务 |
|
transaction.Commit(); |
|
Console.WriteLine("事务已成功提交。"); |
|
} |
|
catch (Exception ex) |
|
{ |
|
// 如果发生异常,则回滚事务 |
|
try |
|
{ |
|
if (transaction != null) |
|
{ |
|
transaction.Rollback(); |
|
} |
|
} |
|
catch |
|
{ |
|
// 处理回滚时可能出现的异常 |
|
} |
|
Console.WriteLine("事务已回滚,因为发生了错误: " + ex.Message); |
|
} |
|
finally |
|
{ |
|
// 关闭连接(如果它仍然打开) |
|
if (connection != null) |
|
{ |
|
connection.Close(); |
|
} |
|
} |
|
} |
|
} |
在这个示例中,我们执行了两个更新操作,这两个操作都在同一个事务中执行。如果任何一个SqlCommand执行失败,那么catch块中的代码会捕获异常,并调用transaction.Rollback()方法来回滚事务,确保数据库的一致性。如果所有操作都成功执行,那么transaction.Commit()方法会被调用以提交事务,将更改保存到数据库中。
请确保将connectionString、YourTable、Column1、Value1、Condition1、Column2、Value2和Condition2替换为适合你的数据库环境的信息。
事务处理对于确保数据库的一致性和完整性至关重要,尤其是在执行多个相互依赖的数据库操作时。使用事务可以确保这些操作要么全部成功,要么全部失败,从而避免部分操作成功而其他操作失败可能导致的数据不一致问题。