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

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 52 ::
收藏到网摘: 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