《關於工程帶資料庫打包(3)―自動安裝備份資料庫資料》 (轉)

amyz發表於2007-08-15
《關於工程帶資料庫打包(3)―自動安裝備份資料庫資料》 (轉)[@more@]

 

  前一篇中介紹瞭如何連同 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章