《關於工程帶資料庫打包(3)―自動安裝備份資料庫資料》 (轉)
前一篇中介紹瞭如何連同 SERVER的桌面版本一同打包到的簡單步驟,這裡還想就自己對於:釋出程式到已經有SQL環境的時,自動使用SQL的Osql來恢復指定的到你的的Date中。
:namespace prefix = o ns = "urn:schemas--com::office" />
首先,在c:建立一個臨時目錄,例如c:TempBD ,複製Osql.exe到目錄下,複製你的資料庫(Truck)到目錄下;在目錄下分別建立Restore.bat和Restore.txt,內容如下:
1. Restore.bat檔案內容:
osql -E -S -i C:TempDBRestore.txt
2. Restore.txt檔案內容:
use master
if exists ( * from sysdevices where name='TruckDB')
EXEC sp_dropdevice 'TruckDB'
Else
EXEC sp_addumpdevice 'disk','TruckDB', 'C:Program FilesMicrosoft SQL ServerMSSQLDataTruckDB.mdf'
restore database TruckDB
from disk='c:TempDBTruckDB'
with replace
其次,在你的工程中新增一個Installer Class:選中Project主工程,新增Installer Class,名稱假定為installer1。選擇instller1的內碼表,新增下面的程式碼:
Public Overrs Sub Install(ByVal stateSaver As System.Collections.IDictionary)
'重寫install方法
Dim file As System.IO.File
If file.Exists("C:Program FilesMicrosoft SQL ServerMSSQLDataTruckDB_data.mdf") = True Then Exit Sub
MyBase.Install(stateSaver)
Dim CheckedDir As System.IO.Directory
If CheckedDir.Exists("C:Program FilesMicrosoft SQL ServerMSSQLData") = False Then
CheckedDir.CreateDirectory("C:Program FilesMicrosoft SQL ServerMSSQLData")
End If
Dim FullPath As String
Dim Asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim strConfigLoc As String
strConfigLoc = Asm.Location
Dim strTemp As String
strTemp = strConfigLoc
'提取安裝路徑
strTemp = strTemp.Remove(strTemp.LastIndexOf(""), Len(strTemp) - strTemp.LastIndexOf(""))
'Copy DateBase to computer.
If CreatDIR(strTemp) = False Then
'失敗,反安裝
Me.Uninstall(stateSaver)
Exit Sub
Else
End If
If InstallDB(strTemp) = False Then
‘失敗,反安裝
Me.Uninstall(stateSaver)
Exit Sub
Else
End If
‘刪除資料庫臨時檔案
DeleteDIR(“c:TempDB”)
DeleteDIR(strTemp + “TempDB”)
End Sub
Public Overrides Sub Uninstall(ByVal stateSaver As System.Collections.Idictionary)
‘反安裝
‘利用反射提取安裝路徑
MyBase.Uninstall(stateSaver)
Dim Asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim strConfigLoc As String
strConfigLoc = Asm.Location
Dim strTemp As String
strTemp = strConfigLoc
strTemp = strTemp.Remove(strTemp.LastIndexOf(“”), Len(strTemp) – strTemp.LastIndexOf(“”))
‘刪除資料庫檔案和臨時檔案
DeleteDIR(strTemp + “TempDB”)
DeleteDIR(“c:TempDB”)
End Sub
Private Function DeleteDIR(ByVal path As String) As Boolean
‘刪除指定的資料夾
Dim dir As System.IO.Directory
If dir.Exists(path) = True Then dir.Delete(path, True)
End Function
Private Function CreatDIR(ByVal path As String) As Boolean
‘建立指定的資料夾
Dim Files As System.IO.File
Dim Dirs As System.IO.Directory
Try
If Dirs.Exists(“c:TempDB”) = False Then Dirs.CreateDirectory(“c:TempDB”)
‘copy Creat DB files
CopyFile(path + “TempDB”, “C:TempDB”)
Return True
Catch
Return False
End Try
End Function
Private Sub CopyFile(ByVal DirName As String, ByVal DestDirName As String)
‘copy指定的資料夾的所有檔案到目標資料夾(單層)。
Dim dir As System.IO.Directory
Dim File As System.IO.File
Dim sPath, oPath As String
Dim I As Integer
For I = 0 To dir.GetFiles(SourceDirName).Length – 1
sPath = dir.GetFiles(SourceDirName).GetValue(i).ToString
oPath = Microsoft.VisualBasic.Right(sPath, Len(sPath) – Len(SourceDirName))
File.Copy(sPath, DestDirName + oPath, True)
Next
End Sub
Private Function InstallDB(ByVal path As String) As Boolean
‘安裝資料庫,自動批處理。
'Dim CheckedDir As System.IO.Directory
'If CheckedDir.Exists(“C:Program FilesMicrosoft SQL ServerMSSQLData”) = False Then
'CheckedDir.CreateDirectory(“C:Program FilesMicrosoft SQL ServerMSSQLData”)
'End If
Try
(“c:TempDBRestore.bat”, AppWinStyle.Hide, True)
Catch
End Try
End Function
然後,在你的工程中新增一個安裝工程,取名為MySetup1,按照正常的步驟新增工程輸出(Project Output),選擇輸出檔案(primary output)和內容檔案(content files)兩項,再新增資料夾到application Folder,資料夾的Name為TempDB,再給資料夾TempDB新增檔案:osql.exe,Restore.bat,Restore.txt,TruckDB(資料庫檔案)。設定你的資料夾的properties的AlwaysCreate為True。對你的Setup工程進行編譯。
這時,生成的安裝包,將會在安裝完程式後,自動呼叫Installer類的方法,恢復你的TruckDB資料庫。
注意,TruckDB在生成的時候,應該備份儲存到“C:Program FilesMicrosoft SQL ServerMSSQLData”下,便於恢復。
《關於工程帶資料庫打包(3)―自動安裝備份資料庫資料》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-959174/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於工程帶資料庫打包(1) (轉)資料庫
- 《關於工程帶資料庫打包(2)―自動安裝定製的MSDE例項》 (轉)資料庫
- 資料庫自動備份資料庫
- 關於移動資料庫(轉載)資料庫
- Mysql資料庫自動備份MySql資料庫
- 自動備份Oracle資料庫Oracle資料庫
- 關於資料庫驅動資料庫
- Oracle 資料庫打包安裝Oracle資料庫
- 每天自動備份Oracle資料庫Oracle資料庫
- 3.1.3 關於資料庫服務自動啟動資料庫
- 資料庫自動啟動關閉資料庫
- 自動更新資料庫資料的shell資料庫
- [轉]Mysql資料庫相關資料索引MySql資料庫索引
- 關於資料庫故障資料庫
- Python3爬蟲資料入資料庫---把爬取到的資料存到資料庫,帶資料庫去重功能Python爬蟲資料庫
- oracle 備份資料庫,匯出資料庫Oracle資料庫
- 【轉載】關聯式資料庫還是NoSQL資料庫資料庫SQL
- 關於批處理(bat)資料庫備份BAT資料庫
- 讓資料庫更安全,Mysql自動備份指令碼(轉)資料庫MySql指令碼
- 資料庫自動重連資料庫
- Oracle自動備份資料(轉)Oracle
- mongodb資料庫備份與恢復(資料庫資料遷移)MongoDB資料庫
- 2.1 關於建立資料庫資料庫
- 關於資料庫碎片管理資料庫
- 3.3.1 關於關閉資料庫資料庫
- 關於資料庫open的深入探究(轉)資料庫
- 【轉】sqlserver2005資料庫映象時遇到 “資料庫在其中一個夥伴上是自動關閉的資料庫”SQLServer資料庫
- 關於大資料和資料庫的討論大資料資料庫
- 資料庫備份資料庫
- 3.1.5.1 關於啟動資料庫例項資料庫
- Oracle中關於資料庫例項名與資料庫服務名(轉載)Oracle資料庫
- 資料庫邏輯備份(轉)資料庫
- 用ASP備份資料庫 (轉)資料庫
- 關係型資料庫:使用正規化建立資料庫(轉)資料庫
- OO資料庫和關係型資料庫資料庫
- [資料庫] Navicat for MySQL定時備份資料庫及資料恢復資料庫MySql資料恢復
- DB2資料庫自動備份方法TRDB2資料庫
- windowns系統,oracle資料庫expdp自動備份Oracle資料庫