在三层架构中,事务应该放在那管理,如果放到调用DAL的业务层操作类中,DAL类中操作的Connection通过参数形式传入,那么怎样才能避免在BLL层创建数据库操作类(DBHelper)对象?
如果在BLL创建DBHelper对象,然后将connection作为参数传回DAL类中,connection的取得和关闭均在BLL。这样BLL与DBHelper的耦合度将加强,没有起到分层的作用。
最好的办法就是将事务处理独立出来,该类的功能主要是创建数据库连接,开启事务处理,关闭连接。代码如下:
数据库操作类代码如下:
在DBUtil中,所有具有事务处理的方法都不需要关闭连接,数据库的连接在其开启的地方进行关闭。
在DAL层中,接收来自BLL层的connection,然后调用DBUtil中的方法进行数据的操作。代码如下:
连接的创建,及事务的开启均在BLL层进行,执行完毕后,连接也在该层关闭。代码如下:
实例代码连接的是MySql数据库,需要在工程中引入Mysql.Data.dll文件。