当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > [DNN模块开发]如何写模块数据库安装脚本

ASP.NET
如果操作EXCEL提示没有权限?
不让别人保存你的网页
从C#转到VB .net
创建虚拟目录的常用属性
visual studio 2005又一新增功能
Com与.Net互操作(二次业务开发及插件开发总结)
Wap页面使用asp.net中移动控件List分页(原创)
关于如何操作其他窗体的控件或变量的方法!
C#版MultiSelected DataGrid
使用非托管代码直接修改字符串
如何让一个函数返回多个值(C#)
(原创)C#编写的windows计算器----源代码
(原创)C#获取本地计算机名,IP,MAC地址
用C#读取sina天气预报到wap页面(一)(原创)
窗体问题--拖动无标题栏的窗体
写在VB.NET公共论坛的开篇语!
在VB6中动态创建使用ADO控件访问数据库
使用Visual Basic 6实现真正实用的多线程处理
设计模式之Facade:家庭篇
如何设置tabcontrol控件的tabPage的text内容显示成竖着的字体

ASP.NET 中的 [DNN模块开发]如何写模块数据库安装脚本


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 100 ::
收藏到网摘: n/a

  编写DotNetNuke(以下简称DNN)模块相关数据库安装/卸载脚本,是模块开发的一个重要环节。DNN程序会根据模块相关的脚本自动安装或卸载模块相关的表和存储过程等。

  DNN中模块的数据库安装脚本一般命名为:版本号.具体数据访问Provider名称(如对应SQLServer的安装文件可为:01.00.00.SqlDataProvider)。在上传新模块时,DNN的模块安装程序,会根据DNN文件中所列举的数据库脚本清单,按版本顺序执行数据库脚本。如果是升级安装则只执行大于当模块前版本的数据库安装脚本。所以在编写下一个版本的数据库安装脚本时一定要记住这一点:在原来的基础上修改,而不是全部重写。比如:你有一个模块在下一个版本的改动中只是添加了一个存储过程,那么这个版本的数据库脚本只需包含创建该存储过程的代码即可,无需重写全部对象。同时还要注意模块版本与数据库脚本版本的统一。

  DNN中模块的数据库卸载脚本一般命名为:Uninstall.具体数据访问Provider名称(如对应SQLServer的卸载文件可为:Uninstall.SqlDataProvider)。在删除模块时,DNN会根据这个文件的内容删除模块相关的表和存储过程。

编写脚本的步骤可如下(已SQL Server数据库为例):
1、在数据库中创建要使用到的表和存储过程。
2、可先用SQL Server的查询分析器生成相关表和存储过程的创建/除去脚本。3、将这些对象的脚本复制到一个文件中,并在表和存储过程对象名称前面加上{databaseOwner}{objectQualifier}前缀;在主/外键名称上加上{objectQualifier}前缀,如:PK{objectQualifier}_CLinks、FK_{objectQualifier}CLinks_Modules。
关于{databaseOwner}{objectQualifier}的含义和用途可参见:http://www.cnblogs.com/csdn/archive/2004/11/30/71118.html
4、按照数据库安装/卸载脚本的命名规则分别命名文件。
5、具体的一些做法,也可参照已有模块的数据库安装/卸载脚本文件
6、好像有个模版也可以编写存储过程,不过好像用途不大,有兴趣的可以去看看:
http://dnnjungle.vmasanas.net/Development/Templates/tabid/28/Default.aspx

一个值得注意的问题:
SQL Server数据库的安装/卸载脚本,是通过SqlDataProvider类中的ExecuteScript方法执行的。该方法中有这么一句“Dim Delimiter As String = "GO" & ControlChars.CrLf”,也就是说是以:“GO+回车换行符”来分割一段SQL脚本中每一个可被执行的SQL语句。利用Split分隔每一个语句到一个数组中,通过循环执行每一个SQL。这样我们在写数据库的安装/卸载脚本时一定要注意在每一个语句后面都加上“GO+回车换行符”,特别是最后一句的“回车换行符”一定不能忘记。否则,最后一句要么执行不了,要么会报错。

还有一个值得注意的问题:
数据库的安装/卸载脚本文件必须以utf-8编码格式保存,否则可能会报错。

相关内容:
DNN模块的层次划分:http://www.cnblogs.com/esshs/archive/2005/07/27/201190.html
关于模块文件结构:http://www.cnblogs.com/esshs/archive/2005/07/21/197198.html
关于DNN文件结构:http://www.cnblogs.com/esshs/archive/2005/07/26/200154.html