環境:Windows2003 + vs2005+sqlserver2000
1、打開VS2005,打開工程或網站(這裡的示例是一個已發布的網站系統).
2、從“解決方案資源管理器中”右鍵點擊解決方案名稱,選擇“添加”――“新建項目”,從打開的“添加新項目”窗口,在“項目類型”欄選擇“其他項目類型”――“安裝部署”,在模板欄,選“web項目”,在下面的名稱和地址欄輸入名稱和地址。
3、生成sql文件(只生成創建數據表的SQL語句)
打開SQLSER企業管理器,登錄,選擇數據庫――選擇要生成SQL語句的表,右鍵――所有任務――生成SQL腳本。在打開的窗口中點擊“確定”,保存SQL腳本(注意:sql文件一定要用小寫的英文名稱命名,保存完成後把SQL文件另存為TXT文件,並把裡面的所有的“GO”去掉。)
4、創建安裝程序類庫和安裝程序類
從“解決方案資源管理器中”右鍵點擊解決方案名稱,選擇“添加”――“新建項目”,從打開的“添加新項目”窗口,在“項目類型”欄選擇“VISAL BASIC”,在模板欄,選“類庫”,在下面的名稱和地址欄輸入名稱和地址。點擊“確定”。
5、從“解決方案資源管理器中”點擊剛生成的類庫,刪除自動生成的class1.vb類,右鍵點擊類庫名稱――添加――新建項,選擇“安裝程序類”,輸入名稱,點擊“添加”按鈕。
6、打開剛生成的安裝程序類,在dbtest.vb中,添加如下代碼
Imports System.ComponentModel
Imports System.Configuration.Install
Imports System.IO
Imports System.Reflection
Public Class dbtest
'聲明私有變量
Private sqlConnection1 As SqlClIEnt.SqlConnection
Private ServerName As String
Private AdminName As String
Private AdminPwd As String
Public Sub New()
MyBase.New()
'組件設計器需要此調用。
InitializeComponent()
'調用 InitializeComponent 後添加初始化代碼
End Sub
Private Function GetSql(ByVal Name As String) As String
Try
' Gets the current assembly.
Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()
' Resources are named using a fully qualifIEd name.
Dim strm As Stream = Asm.GetManifestResourceStream( _
Asm.GetName().Name + "." + Name)
' Reads the contents of the embedded file.
Dim reader As StreamReader = New StreamReader(strm)
Return reader.ReadToEnd()
Catch ex As Exception
MsgBox("讀取SQL文件出錯: " & ex.Message)
Throw ex
End Try
End Function
Private Sub ExecuteSql(ByVal DatabaseName As String, ByVal Sql As String)
Dim Command As New SqlClIEnt.SqlCommand(Sql, sqlConnection1)
Command.Connection.Open()
Command.Connection.ChangeDatabase(DatabaseName)
Try
Command.ExecuteNonQuery()
Finally
' Finally, blocks are a great way to ensure that the connection
' is always closed.
Command.Connection.Close()
End Try
End Sub
6、添加SQL腳本文件到類庫中。
右鍵點擊類庫名稱――添加――現有項,選擇watertable.txt文件。點擊“確定”。
右鍵選擇剛剛添加的watertable.txt文件,選“屬性”,把“生成操作”項內容修改為“嵌入的資源”。
7、生成類庫的DLL文件。
8、右鍵安裝項目名稱――“視圖”――“文件系統”,在打開的“文件系統窗口”,右鍵“WEB應用程序文件夾”――“添加”――項目輸出,
從“項目”下拉列表框中,選擇類庫為“主輸出”,
重復上步操作,選擇網站為“內容文件”
9、添加安裝時用戶要輸入的數據庫服務器名稱、用戶名、密碼的用戶界面。
右鍵安裝項目名稱――視圖――用戶界面,在打開的安裝界面中,右鍵“啟動”,選擇“添加對話框”,在彈出的窗口中,選擇“文本框A”。
右鍵文本框A,選擇“上移”,重復執行,直到在“安裝地址”上。
右鍵“文本框A”――屬性,進行如下修改。
Edit1lable1 數據庫服務器:
Edit1property DBSERVERNAME
Edit1visible true
Edit2lable1 用戶名:
Edit2property USERNAME
Edit2visible true
Edit3lable1 用戶名:
Edit3property PASSWord
Edit3visible true
Edit4visible false
10、添加自定義操作
在“解決方案資源管理器中”,右鍵安裝項目名稱――“視圖”――“自定義操作”,在打開的自定義操作窗口,右鍵“安裝”――“添加自定義操作”,在打開的“選擇項目的項”,雙擊“WEB應用程序文件夾”――主輸出來自clslib(活動)。
右鍵“主輸出來自clslib(活動)”――“屬性窗口”,修改屬性
CustoMactiondata 為
/server=[DBSERVERNAME] /user=[USERNAME] /pwd=[PASSWord] /targetdir="[TARGETDIR]"
注意:每個變量之間一定要有一個空格做間隔,如果想得到安裝文件在安裝機器中的路徑,一定要添加 targetdir 變量。
11、添加系統必備
右鍵安裝項目名稱――屬性――選擇系統必備
在打開的系統必備窗口,選擇 “.Net framework 2.0”――選擇“從與我的應用程序相同路徑下載系統必備”,點擊“確定”
12、生成安裝項目。
從菜單“生成”――“生成websetup”,生成安裝項目。
13、安裝項目界面
從“解決方案資源管理器”――安裝項目,右鍵安裝項目名稱――安裝。
生成的數據庫
生成的網站
修改後的web.config
寫在後面的話:
做完程序後,發現用SQLSER的恢復數據庫方法比用SQL文件要好的多,也方便的多,就做了一個過程,代碼如下:
Private sub RestoreDB()
Dim strdir as string
Dim strSql as string
‘得到安裝程序路徑
Strdir=me.context.parameters.item(“targetdir”)
Strsql="RESTORE DATABASE water FROM DISK = '" + strdir + "data.bak' " +
" WITH MOVE 'water_data' TO '" + "c:water.mdf', " +
" MOVE 'water_log' TO '" + "c:water_log.ldf' "
Executesql(“master”,strsql)
End sub
注意:data.bak是sqlserver備份數據庫名,也可以沒有後綴,如果沒有後綴,在程序中也不要有,還有備份文件要和發布的網站文件放在一起,water_data、water_log是邏輯數據名,在sqlserver數據庫中的備份恢復中都能查看到的,TO 後面是把*.mdf和*.ldf文件復制到一個路徑下,直接寫死就可以了。