DotNetNuke 数据访问层

数据访问层(DAL
    数据访问层(
DAL)必须实现数据提供者抽象类中声明的方法。然而,每一个DAL提供者在实现这些方法时也许很不相同。这种处理允许提供者灵活的选择他们自己的数据库访问协议(也就是说:.NET管理的OleDB, ODBC等)。同样也允许提供者处理数据库平台之间的所有不同之处(例如:存储过程,sql语言语法,@@IDENTITY)。

每一个数据提供者必须为其在web.config中的自定义属性指定一个实现方法。

Imports System

Imports System.Data

Imports System.Data.SqlClient

Imports Microsoft.ApplicationBlocks.Data

Imports System.IO

Imports System.Web

Imports DotNetNuke

 

Namespace DotNetNuke.Data

 

    Public Class SqlDataProvider

 

        Inherits DataProvider

 

        Private Const ProviderType As String = "data"

 

        Private _providerConfiguration As ProviderConfiguration = ProviderConfiguration.GetProviderConfiguration(ProviderType)

        Private _connectionString As String

        Private _providerPath As String

        Private _objectQualifier As String

        Private _databaseOwner As String

 

        Public Sub New()

 

            ' Read the configuration specific information for this provider

            Dim objProvider As Provider = CType(_providerConfiguration.Providers(_providerConfiguration.DefaultProvider), Provider)

 

            ' Read the attributes for this provider

            _connectionString = objProvider.Attributes("connectionString")

 

            _providerPath = objProvider.Attributes("providerPath")

 

            _objectQualifier = objProvider.Attributes("objectQualifier")

            If _objectQualifier <> "" And _objectQualifier.EndsWith("_") = False Then

                _objectQualifier += "_"

            End If

 

            _databaseOwner = objProvider.Attributes("databaseOwner")

            If _databaseOwner <> "" And _databaseOwner.EndsWith(".") = False Then

                _databaseOwner += "."

            End If

 

        End Sub

 

        Public ReadOnly Property ConnectionString() As String

            Get

                Return _connectionString

            End Get

        End Property

 

        Public ReadOnly Property ProviderPath() As String

            Get

                Return _providerPath

            End Get

        End Property

 

        Public ReadOnly Property ObjectQualifier() As String

            Get

                Return _objectQualifier

            End Get

        End Property

 

        Public ReadOnly Property DatabaseOwner() As String

            Get

                Return _databaseOwner

            End Get

        End Property

 

数据访问方法必须涉及成简单的查询(例如 单一的selectinsertupdatedelete),以便于在所有的数据库平台上他们都能被实现。业务逻辑(例如条件分支,计算或局部变量)应该在业务逻辑层实现,这样才能从数据库抽象出来并集中到一个应用程序(模块)里处理。如果你经常用那些使你可以在数据库层实现程序逻辑的富sql语言变量工作的话,这种数据库访问是相当简单的。

DNN中的Sql server/msde 数据提供者用了存储过程作为最好的数据访问技术。

 

        ' links module

        Public Overrides Function GetLinks(ByVal ModuleId As Integer) As IDataReader

            Return CType(SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner & ObjectQualifier & "GetLinks", ModuleId), IDataReader)

        End Function

        Public Overrides Function GetLink(ByVal ItemId As Integer, ByVal ModuleId As Integer) As IDataReader

            Return CType(SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner & ObjectQualifier & "GetLink", ItemId, ModuleId), IDataReader)

        End Function

        Public Overrides Sub DeleteLink(ByVal ItemId As Integer)

            SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "DeleteLink", ItemId)

        End Sub

        Public Overrides Sub AddLink(ByVal ModuleId As Integer, ByVal UserName As String, ByVal Title As String, ByVal Url As String, ByVal MobileUrl As String, ByVal ViewOrder As String, ByVal Description As String, ByVal NewWindow As Boolean)

            SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "AddLink", ModuleId, UserName, Title, Url, MobileUrl, IIf(ViewOrder <> "", ViewOrder, DBNull.Value), Description, NewWindow)

        End Sub

        Public Overrides Sub UpdateLink(ByVal ItemId As Integer, ByVal UserName As String, ByVal Title As String, ByVal Url As String, ByVal MobileUrl As String, ByVal ViewOrder As String, ByVal Description As String, ByVal NewWindow As Boolean)

            SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "UpdateLink", ItemId, UserName, Title, Url, MobileUrl, IIf(ViewOrder <> "", ViewOrder, DBNull.Value), Description, NewWindow)

        End Sub

 

       DNN用到存储过程(存储过程查询)但是没有用参数自动查找的特性( CommandBuilder.DeriveParameters ),因此参数必须明确的定义。

 

        ' links module

        Public Overrides Function GetLinks(ByVal ModuleId As Integer) As IDataReader

            Return CType(OleDBHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier & "GetLinks", _

                New OleDbParameter("@ModuleId", ModuleId)), IDataReader)

        End Function

        Public Overrides Function GetLink(ByVal ItemId As Integer, ByVal ModuleId As Integer) As IDataReader

            Return CType(OleDBHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure, ObjectQualifier & "GetLink", _

                New OleDbParameter("@ItemId", ItemId), _

                New OleDbParameter("@ModuleId", ModuleId)), IDataReader)

        End Function

        Public Overrides Sub DeleteLink(ByVal ItemId As Integer)

            OleDBHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier & "DeleteLink", _

                New OleDbParameter("@ItemId", ItemId))

        End Sub

        Public Overrides Sub AddLink(ByVal ModuleId As Integer, ByVal UserName As String, ByVal Title As String, ByVal Url As String, ByVal MobileUrl As String, ByVal ViewOrder As String, ByVal Description As String, ByVal NewWindow As Boolean)

            OleDBHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier & "AddLink", _

                New OleDbParameter("@ModuleId", ModuleId), _

                New OleDbParameter("@UserName", UserName), _

                New OleDbParameter("@Title", Title), _

                New OleDbParameter("@Url", Url), _

                New OleDbParameter("@MobileUrl", MobileUrl), _

                New OleDbParameter("@ViewOrder", IIf(ViewOrder <> "", ViewOrder, DBNull.Value)), _

                New OleDbParameter("@Description", Description), _

                New OleDbParameter("@NewWindow", NewWindow))

        End Sub

        Public Overrides Sub UpdateLink(ByVal ItemId As Integer, ByVal UserName As String, ByVal Title As String, ByVal Url As String, ByVal MobileUrl As String, ByVal ViewOrder As String, ByVal Description As String, ByVal NewWindow As Boolean)

            OleDBHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure, ObjectQualifier & "UpdateLink", _

                New OleDbParameter("@ItemId", ItemId), _

                New OleDbParameter("@UserName", UserName), _

                New OleDbParameter("@Title", Title), _

                New OleDbParameter("@Url", Url), _

                New OleDbParameter("@MobileUrl", MobileUrl), _

                New OleDbParameter("@ViewOrder", IIf(ViewOrder <> "", ViewOrder, DBNull.Value)), _

                New OleDbParameter("@Description", Description), _

                New OleDbParameter("@NewWindow", NewWindow))

        End Sub

请使用浏览器的分享功能分享到微信等