Also see:
When you create a DotNetNuke module that needs to connect to the database, you have the option of coding the data access methods manually or leveraging the DotNetNuke framework.
The DotNetNuke framework provides a full featured Data Access Layer (DAL). The DAL also includes an special subset of methods commonly refereed to as the DAL+
The following diagram shows an overview of the DAL and the DAL+ :
Graphic courtesy of http://www.effority.net ITM GmbH
The DAL has this purpose:
To allow DotNetNuke (and it's modules) to communicate with any data source.
The DAL+ does not require an Abstract Data Provider and it does not require that you code a custom Concrete Provider. The DAL+ is a subset of the DAL. It is comprised of 4 methods that exist in the DotNetNuke framework's currently configured Concrete Provider. The methods are:
Below is an explanation of the format used to implement the DAL+ using the ExecuteReader method:
The DAL+ allows you to use code such as this (in the Controller Class) to connect to the currently configured database:
Public
Shared
Function
ThingsForSale_SelectAll(ByVal
ModuleId As
Integer)
As List(Of
ThingsForSaleInfo)
Return
CBO.FillCollection(Of
ThingsForSaleInfo)(CType(DataProvider.Instance().ExecuteReader("ThingsForSale_SelectAll",
ModuleId), IDataReader))
End
Function
However, unlike the DAL, the DAL+ is not 100% portable to other data sources. For example, if a module is developed using the DAL+ that retrieves data using one stored procedure, an alternate database must be able to perform the exact same functionality using only one stored procedure. In some cases this is not possible due to differences in databases.
However, in those instances where you will not need to run your module on alternate databases (for example for internal development) it is recommended that you use the DAL+. The code savings is significant.
Graphic courtesy of http://www.effority.net ITM GmbH
The DAL does require that you code a Abstract Provider and one or more custom Concrete Providers. This allows you to create modules that are 100% portable to other databases.
The Abstract Provider reads the settings in the web.config file to determine what the currently configured database is and exposes data access methods. In the example below the method is GetSurveys which is declared MustOverride.
' return the provider
Public
Shared
Shadows
Function
Instance()
As
DataProvider
Return
objProvider
End
Function
' dynamically create provider
Private
Shared
Sub CreateProvider()
objProvider = CType(Framework.Reflection.CreateObject("data",
"DotNetNuke.Modules.Survey",
""), DataProvider)
End
Sub
' methods to be overridden by the concrete
provider
Public
MustOverride
Function
GetSurveys(ByVal
ModuleId As
Integer)
As IDataReader
The Concrete Provider overrides the methods in the Abstract Provider and performs the data access task.
Public
Class SqlDataProviderThe Controller Class uses DataProvider.Instance() to call methods in the Abstract Provider which calls the corresponding overridden methods in the Concrete Provider.
Public Shared Function GetSurveys(ByVal ModuleId As Integer) As List(Of SurveyInfo)Using the DAL+ allows a module developer to write less code to access the database than they would if they did not use the DotNetNuke framework. The DAL+ has it's limitations and the DAL is provided in those cases where 100% portability is required.
DAL+ - Super-Fast Super-Easy Module (DAL+)
DAL - DNN4 Survey Module (Beta)
Data Access Guidelines
http://www.dotnetnuke.com/About/Documentation/ProjectDocuments/tabid/478/Default.aspx
To develop your own DotNetNuke modules, it is recommended that you start with one of these tutorials:
DotNetNuke® is a registered trademark of Perpetual Motion Interactive Systems Inc.