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

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

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

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

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

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

編寫腳本的步驟可如下(已SQL Server數(shù)據(jù)庫為例):
1、在數(shù)據(jù)庫中創(chuàng)建要使用到的表和存儲過程。
2、可先用SQL Server的查詢分析器生成相關(guān)表和存儲過程的創(chuàng)建/除去腳本。3、將這些對象的腳本復(fù)制到一個文件中,并在表和存儲過程對象名稱前面加上{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ù)庫安裝/卸載腳本的命名規(guī)則分別命名文件。
5、具體的一些做法,也可參照已有模塊的數(shù)據(jù)庫安裝/卸載腳本文件
6、好像有個模版也可以編寫存儲過程,不過好像用途不大,有興趣的可以去看看:
http://dnnjungle.vmasanas.net/Development/Templates/tabid/28/Default.aspx

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

還有一個值得注意的問題:
數(shù)據(jù)庫的安裝/卸載腳本文件必須以utf-8編碼格式保存,否則可能會報錯。

相關(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