Asp.net 在三层架构中事务的使用实例代码
在编程的世界里,事务管理无疑是确保数据完整性和可靠性的关键要素之一。我所了解的,执行事务有两种主要方式:自动事务和普通的SqlTransaction。对于不熟悉服务器配置的朋友来说,自动事务因其简单易用而备受青睐。如果你使用的是web共享主机,由于权限限制,这种方式可能并不适用。那么,我们重点来谈谈最普通的事务处理方式——SqlTransaction。
接触三层架构有一段时间了,对于如何在三层架构中使用事务,我曾在一段时间内感到迷茫。应该放在Sqlhelper里?DAL(数据访问层)?还是BLL(业务逻辑层)?经过多次百度和参考前辈高手的意见,我最终决定将事务逻辑放在业务逻辑层。数据库处理仍然由SQLHELPER完成,BLL层通过SqlTransaction事务传递值访问DAL层,再访问Sqlhelper。下面我将展示相关的代码块。
首先是Sqlhelper的代码:
```csharp
private static SqlConnection Cnn = new SqlConnection(DbConfig.ConnectionString);
region 判断SqlConnection是否开启连接并开启
///
/// 判断SqlConnection是否开启连接并开启
///
///
private static SqlConnection GetCnn() {
if (Cnn.State == ConnectionState.Closed) {
Cnn.Open();
}
return Cnn;
}
endregion
region 关闭数据库连接
///
/// 关闭数据库连接
///
public static void CloseCnn() {
Cnn.Close();
}
endregion
region 产生一个事务并开始
///
/// 产生一个事务并开始
///
///
public static SqlTransaction BeginTransaction() {
SqlTransaction tran = GetCnn().BeginTransaction();
return tran;
}
endregion
```
接着是DAL(数据访问层)的代码:
```csharp
public bool test(int i, SqlTransaction tran) {
string sql = "insert into [test]([item]) values(@i)";
SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@i", i) };
return sqlhelper.ExecutenQuery(sql, paras, CommandType.Text, tran) > 0;
}
```
最后是BLL(业务逻辑层)的代码:
```csharp
UserDAO userdao = new UserDAO();
public bool test() {
using (SqlTransaction tran = SQLHelper.BeginTransaction()) {
try {