| 后一修订版 | 前一修订版 |
| csharp:事务 [2025/12/02 14:53] – 创建 张叶安 | csharp:事务 [2025/12/02 14:54] (当前版本) – [2. 使用 ADO.NET 本地事务 (SqlTransaction)] 张叶安 |
|---|
| 事务必须具备 ACID 四大特性: | 事务必须具备 ACID 四大特性: |
| |
| * **原子性 (Atomicity)**: 事务中的所有操作作为一个整体,要么全部完成,要么全部不完成。 | * **原子性 (Atomicity)**: 事务中的所有操作作为一个整体,要么全部完成,要么全部不完成。 |
| * **一致性 (Consistency)**: 事务开始前和结束后,数据库的完整性约束没有被破坏。 | * **一致性 (Consistency)**: 事务开始前和结束后,数据库的完整性约束没有被破坏。 |
| * **隔离性 (Isolation)**: 多个事务并发执行时,一个事务的执行不应影响其他事务。 | * **隔离性 (Isolation)**: 多个事务并发执行时,一个事务的执行不应影响其他事务。 |
| * **持久性 (Durability)**: 事务一旦提交,对数据的修改就是永久的。 | * **持久性 (Durability)**: 事务一旦提交,对数据的修改就是永久的。 |
| |
| ===== 2. 使用 ADO.NET 本地事务 (SqlTransaction) ===== | ===== 2. 使用 ADO.NET 本地事务 (SqlTransaction) ===== |
| |
| **关键点:** | **关键点:** |
| * 必须显式调用 `BeginTransaction()`。 | * 必须显式调用 `BeginTransaction()`。 |
| * `SqlCommand` 对象必须设置 `Transaction` 属性,否则会报错。 | * `SqlCommand` 对象必须设置 `Transaction` 属性,否则会报错。 |
| * 必须在 `try-catch` 块中处理 `Commit()` 和 `Rollback()`。 | * 必须在 `try-catch` 块中处理 `Commit()` 和 `Rollback()`。 |
| |
| ===== 3. 使用 TransactionScope (隐式事务/分布式事务) ===== | ===== 3. 使用 TransactionScope (隐式事务/分布式事务) ===== |