开始先简单交代一下DAL, 所谓DAL, 即是DNN数据访问层(Data Access Layer), 主要负责数据库和业务逻辑的交互, 利用设计模式中的工厂模式来实现数据提供者的分离, 从而可兼容不同数据库.
DNN从4.x版本之后引入一个新生宠儿, 所谓DAL+(Data Access Layer Plus), 顾名思义, DAL+就是对DAL的插件(或补充), 是DAL的一个子集.是一种对数据库访问和交互的替代方式. 当你深入了解DNN核心代码及其机制时, 你会发现DAL+就是对DNN所包含的Microsoft Application Blocks的封装, 你所调用Microsoft Application Blocks可完全用DAL+来操作数据访问. 其操作流程如图:
就如图所展示的,DAL+屏蔽了具体数据访问层,而直接访问抽象数据访问层. DAL+不需具体的数据访问提供者,它主要包含DNN框架默认数据访问的四个方法:
1 ) ExecuteNonQuery: 执行没有返回值的存储过程
2 ) ExecuteReader: 执行返回多个记录值的存储过程
3 ) ExecuteScalar: 执行只有一个返回值的存储过程
4 ) ExecuteSQL: 执行具体的SQL语句
类似下边例子(使用DAL+的ExecuteReader获取数据):
这样你可以直接在Controls Class(业务控制类)中使用DAL+获取数据集,代码如下:
- Public Function GetArticlesByModule(ByVal ModuleId As Integer) As List(Of ArticlesInfo)
- Return CBO.FillCollection(Of ArticlesInfo)(CType(DataProvider.Instance().ExecuteReader("GetArticlesByModule", ModuleId), IDataReader))
- End Function
DAL+所具有的缺点是不能使用数据提供者这一核心机制, 可能不兼容其他数据库. 但其实DNN平台主要还是使用SQL Sever, 所以对于有些小型应用, DAL和DAL+的区别是无关紧要的. 相反DAL+能让你的代码更为清晰明了,数据访问更为直接, 也节省了好多代码, 比如不再需要DataProvider和SqlDataProvider这两个类, 当然你也不再需要单独建立一个DataProvider项目.