明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

[DNN模塊開發(fā)]如何寫模塊數(shù)據(jù)庫(kù)安裝腳本

[摘要]編寫DotNetNuke(以下簡(jiǎn)稱DNN)模塊相關(guān)數(shù)據(jù)庫(kù)安裝/卸載腳本,是模塊開發(fā)的一個(gè)重要環(huán)節(jié)。DNN程序會(huì)根據(jù)模塊相關(guān)的腳本自動(dòng)安裝或卸載模塊相關(guān)的表和存儲(chǔ)過程等! NN中模塊的數(shù)據(jù)庫(kù)安裝腳本一般命名為:版本號(hào).具體數(shù)據(jù)訪問Provider名稱(如對(duì)應(yīng)SQLServer的安裝文件可為:01...

  編寫DotNetNuke(以下簡(jiǎn)稱DNN)模塊相關(guān)數(shù)據(jù)庫(kù)安裝/卸載腳本,是模塊開發(fā)的一個(gè)重要環(huán)節(jié)。DNN程序會(huì)根據(jù)模塊相關(guān)的腳本自動(dòng)安裝或卸載模塊相關(guān)的表和存儲(chǔ)過程等。

  DNN中模塊的數(shù)據(jù)庫(kù)安裝腳本一般命名為:版本號(hào).具體數(shù)據(jù)訪問Provider名稱(如對(duì)應(yīng)SQLServer的安裝文件可為:01.00.00.SqlDataProvider)。在上傳新模塊時(shí),DNN的模塊安裝程序,會(huì)根據(jù)DNN文件中所列舉的數(shù)據(jù)庫(kù)腳本清單,按版本順序執(zhí)行數(shù)據(jù)庫(kù)腳本。如果是升級(jí)安裝則只執(zhí)行大于當(dāng)模塊前版本的數(shù)據(jù)庫(kù)安裝腳本。所以在編寫下一個(gè)版本的數(shù)據(jù)庫(kù)安裝腳本時(shí)一定要記住這一點(diǎn):在原來的基礎(chǔ)上修改,而不是全部重寫。比如:你有一個(gè)模塊在下一個(gè)版本的改動(dòng)中只是添加了一個(gè)存儲(chǔ)過程,那么這個(gè)版本的數(shù)據(jù)庫(kù)腳本只需包含創(chuàng)建該存儲(chǔ)過程的代碼即可,無需重寫全部對(duì)象。同時(shí)還要注意模塊版本與數(shù)據(jù)庫(kù)腳本版本的統(tǒng)一。

  DNN中模塊的數(shù)據(jù)庫(kù)卸載腳本一般命名為:Uninstall.具體數(shù)據(jù)訪問Provider名稱(如對(duì)應(yīng)SQLServer的卸載文件可為:Uninstall.SqlDataProvider)。在刪除模塊時(shí),DNN會(huì)根據(jù)這個(gè)文件的內(nèi)容刪除模塊相關(guān)的表和存儲(chǔ)過程。

編寫腳本的步驟可如下(已SQL Server數(shù)據(jù)庫(kù)為例):
1、在數(shù)據(jù)庫(kù)中創(chuàng)建要使用到的表和存儲(chǔ)過程。
2、可先用SQL Server的查詢分析器生成相關(guān)表和存儲(chǔ)過程的創(chuàng)建/除去腳本。3、將這些對(duì)象的腳本復(fù)制到一個(gè)文件中,并在表和存儲(chǔ)過程對(duì)象名稱前面加上{databaseOwner}{objectQualifier}前綴;在主/外鍵名稱上加上{objectQualifier}前綴,如:PK{objectQualifier}_CLinks、FK_{objectQualifier}CLinks_Modules。
關(guān)于{databaseOwner}{objectQualifier}的含義和用途可參見:http://www.cnblogs.com/csdn/archive/2004/11/30/71118.html
4、按照數(shù)據(jù)庫(kù)安裝/卸載腳本的命名規(guī)則分別命名文件。
5、具體的一些做法,也可參照已有模塊的數(shù)據(jù)庫(kù)安裝/卸載腳本文件
6、好像有個(gè)模版也可以編寫存儲(chǔ)過程,不過好像用途不大,有興趣的可以去看看:
http://dnnjungle.vmasanas.net/Development/Templates/tabid/28/Default.aspx

一個(gè)值得注意的問題:
SQL Server數(shù)據(jù)庫(kù)的安裝/卸載腳本,是通過SqlDataProvider類中的ExecuteScript方法執(zhí)行的。該方法中有這么一句“Dim Delimiter As String = "GO" & ControlChars.CrLf”,也就是說是以:“GO+回車換行符”來分割一段SQL腳本中每一個(gè)可被執(zhí)行的SQL語(yǔ)句。利用Split分隔每一個(gè)語(yǔ)句到一個(gè)數(shù)組中,通過循環(huán)執(zhí)行每一個(gè)SQL。這樣我們?cè)趯憯?shù)據(jù)庫(kù)的安裝/卸載腳本時(shí)一定要注意在每一個(gè)語(yǔ)句后面都加上“GO+回車換行符”,特別是最后一句的“回車換行符”一定不能忘記。否則,最后一句要么執(zhí)行不了,要么會(huì)報(bào)錯(cuò)。

還有一個(gè)值得注意的問題:
數(shù)據(jù)庫(kù)的安裝/卸載腳本文件必須以u(píng)tf-8編碼格式保存,否則可能會(huì)報(bào)錯(cuò)。

相關(guān)內(nèi)容:
DNN模塊的層次劃分:http://www.cnblogs.com/esshs/archive/2005/07/27/201190.html
關(guān)于模塊文件結(jié)構(gòu):http://www.cnblogs.com/esshs/archive/2005/07/21/197198.html
關(guān)于DNN文件結(jié)構(gòu):http://www.cnblogs.com/esshs/archive/2005/07/26/200154.html