文档章节

DotNetNuke中理解{objectQualifier} {databaseOwner}

 大东家
发布于 2015/08/27 13:20
字数 907
阅读 4
收藏 0

DotNetNuke中理解{objectQualifier} {databaseOwner}

2008-11-27 15:20:00

查看学习心得 

原文地址:http://edu.cnzz.cn/NewsInfo/20255.aspx

 

 在DotNetNuke3.0中,如果我们用英文版安装的时候,在数据库中我们可以看到大部分表都有一个前缀“_DNN”。为什么要设置这个前缀呢,是因为利用objectqualifier(表现为前缀),可以允许在同一个数据库中建立多个主机。在每个存储过程和表中都指定了objectqualifier。例如,你可以设置一个主机利用 'DNN1'作为前缀,同时设置另一个主机的前缀为'DNN2'。通过这种方式,可以在同一个数据库中生成两个用户表,其结构一致,功能一致,但是一个表名为“DNN1_Portals”,另一个表名为“DNN2_Portals”。这两个表且能够在同一个数据库并行运行,而不相互影响。 

 

  在什么地方设置表安装时候的前缀呢?在DNN3.0 web.config(第273行)中,我们可以看看 

 

  <data defaultProvider="SqlDataProvider">

    <providers>

      <clear />

      <add name="SqlDataProvider"

        type="DotNetNuke.Data.SqlDataProvider, DotNetNuke.SqlDataProvider"

        connectionStringName="SiteSqlServer"

        upgradeConnectionString=""

        providerPath="~ProvidersDataProvidersSqlDataProvider"

        objectQualifier="DNN"

        databaseOwner="dbo" />

    </providers>

  </data>

 

  在这个xml节中,objectQualifier="DNN"设置了前缀,所有的表和存储过程,就加上了这个相应地前缀。上边的实例中,只不过在这里设置了两个不同的前缀而已,一个为"DNN1",一个为"DNN2"罢了

接下来,我们先看看在创建表和存储过程的SQL脚本中,其具体实现。 

 

CREATE TABLE {databaseOwner}{objectQualifier}PortalAlias (

  [PortalAliasID] [int] IDENTITY (1, 1) NOT NULL ,

  [PortalID] [int] NOT NULL ,

  [HTTPAlias] [varchar] (200)

) ON [PRIMARY]

GO

CREATE procedure {databaseOwner}{objectQualifier}GetPortalByAlias

@HTTPAlias nvarchar(200)

 

  可以看到在表和存储过程中,都需要加上 {databaseOwner}{objectQualifier}这个前缀。我们可以在存储过程中看到这样一个存储过程“DNN_GetPortalByAlias”。那么我们在实际使用这样一个带前缀的存储过程的时候,如何保证正确使用存储过程呢? 

 

  在具体的应用中,我们在vb代码中利用DatabaseOwner and ObjectQualifier来保证我们正确的使用这些存储过程。下边看一个对该存储过程使用的实例: 

 

  Public Overrides Function GetPortalByAlias(ByVal PortalAlias As String) As IDataReader

Return CType(SqlHelper.ExecuteReader(ConnectionString, DatabaseOwner & ObjectQualifier & "GetPortalByAlias", PortalAlias), IDataReader)

 

  该语句实现利用MS的数据访问块之方法SqlHelper.ExecuteReader,在使用该方法中,常规方式中我们所传入的参数中存储过程名 "GetPortalByAlias",加了前缀后,我们所传入的参数中存储过程名 

 

  DatabaseOwner & ObjectQualifier & "GetPortalByAlias" ,这里的DatabaseOwner和ObjectQualifier 是在类中的定义好的两个属性 

 

    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

 

通过这两个属性,得到web.config中已定义好的objectQualifier="DNN" 和databaseOwner="dbo" ,也就是得到了定义好的前缀"DNN"和"dbo" 。关于在属性实现中,如何得到_objectQualifier和_databaseOwner这些配置信息呢?是通过以下方法来实现的 

 

Public Class SqlDataProvider

    Inherits DataProvider

    Private Const ProviderType As String = "data"

  '读取data配置节信息

    Private _providerConfiguration As ProviderConfiguration = ProviderConfiguration.GetProviderConfiguration(ProviderType)

    Private _connectionString As String

    Private _providerPath As String

    Private _objectQualifier As String

    Private _databaseOwner As String

    Private _upgradeConnectionString As String

    Public Sub New()

      '读取DefaultProvider配置节信息

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

      ' 读取Provider的属性

      If objProvider.Attributes("connectionStringName") <> "" AndAlso _

      System.Configuration.ConfigurationSettings.AppSettings(objProvider.Attributes("connectionStringName")) <> "" Then

        _connectionString = System.Configuration.ConfigurationSettings.AppSettings(objProvider.Attributes("connectionStringName"))

      Else

        _connectionString = objProvider.Attributes("connectionString")

      End If

      _providerPath = objProvider.Attributes("providerPath")

      _objectQualifier = objProvider.Attributes("objectQualifier")

  '依次读取,并得到配置节点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

      If Convert.ToString(objProvider.Attributes("upgradeConnectionString")) <> "" Then

        _upgradeConnectionString = objProvider.Attributes("upgradeConnectionString")

      Else

        _upgradeConnectionString = _connectionString

      End If

    End Sub

It’s that simple!

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/xiaohelong2005/article/details/4340610

粉丝 22
博文 255
码字总数 111936
作品 0
长沙
项目经理
私信 提问
DotNetNuke安装与下载

【下载专区】 DotNetNuke (DNN) 5.1 稳定版正式发布 http://www.dnnmix.com/dotnetnuke-dnn-51-released/ DotNetNuke (DNN) 资源共享 http://www.dnnmix.com/resources/ DotNetNuke官方下载 ......

长平狐
2013/01/06
63
0
DNN Install包,DNN Source包和DNN StarterKit包之间有什么区别?

这三个包都可以用来做为开发的平台,简单的说: “Install包”不包含DotNetNuke的源代码,如果你不想研究DotNetNuke的原理,你可以用这个包。 Source包和Install包的区别就是包含的DotNetNuk...

m2land
2007/01/04
0
0
DotNetNuke模块制作Super-Simple(DAL+)教程-翻译

为入门者准备! (适用于 DotNetNuke Version 4.3.1 or higher) 使用 VB.NET 或 C# 这个教程向你演示如何创建一个使用DAL+“ExecuteSQL”方法的DotNetNuke模块,DAL+是DotNetNuke数据存取层(Da...

m2land
2008/06/12
0
0
DotNetNuke(DNN)学习和应用资源合集

在想解决任何问题之前,请看看DNN的官方文档有没有答案。 DNN官方文档:http://jaist.dl.sourceforge.net/sourceforge/dnn/DotNetNuke4.4.1_Docs.zip DNN官方安装程序和官方模块下载(如果去...

m2land
2008/02/20
0
0
DotNetNuke 7.0 发布,内容管理系统

DotNetNuke 7.0 正式版发布了,DotNetNuke(简称DNN)是一个免费的、开源的、可扩展的内容管理系统,是建立在 ASP.NET 平台上的Web应用框架。 DotNetNuke 7.0 支持在多个站点中共享已有的内容...

oschina
2012/12/01
8.6K
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
2.1K
14
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
38
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
40
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
61
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部