数据库的备份与还原
數據庫的備份與還原
? ? ? ? ? 在人力系統中,由于這個軟件主要的任務就是統計數據的,所以,需求中有一個從系統中直接對數據庫進行備份和還原的功能,注意我們這里使用的是access數據庫,是存放在工程文件中的,不是對SQL數據庫進行備份和還原,這個備份和還原也適用于文件的備份和還原。
? ? ? ? ??具體的代碼實現,也非常的簡單,就是兩個過程,一個備份一個還原就可以直接實現了,具體的代碼如下:
? ? ? ? ??數據庫備份
'數據庫備份Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'異常處理TryDim TargetFileName As String '目標文件名Dim spath As String '文件備份路徑Dim ssource As String '源文件名Dim se As DialogResult '表示窗體關閉后,返回窗口的一個結果se = Me.FolderBrowserDialog1.ShowDialog()'選擇路徑If se = DialogResult.OK Then'MessageBox.Show("你選擇的文件夾路徑為:" & FolderBrowserDialog1.SelectedPath)TargetFileName = FolderBrowserDialog1.SelectedPath & "/HumanResourcesSystem.mdb"'如果該路徑不為空If Microsoft.VisualBasic.Right(Application.StartupPath, 1) <> "/" Then'路徑,文件名spath = Application.StartupPath & "/"ssource = spath & "HumanResourcesSystem.mdb"'文件是否已經存在If Dir$(TargetFileName) <> "" ThenIf MsgBox("文件已存在,確認替換它!", vbYesNo + vbQuestion) = vbNo Then Exit SubKill(TargetFileName) '刪除文件FileCopy(ssource, TargetFileName) '復制文件'DBEngine.CompactDatabase ssource, TargetFileName '壓縮文件MsgBox("數據備份成功!", vbInformation, "提示")ElseFileCopy(ssource, TargetFileName) '復制文件MsgBox("數據備份成功!", vbInformation, "提示")End IfEnd IfEnd IfCatch ex As ExceptionMessageBox.Show(ex.Message.ToString())End TryEnd Sub
? ? ? ? ??數據庫還原
'數據庫還原Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click'異常處理TryDim TargetFileName As String '目標文件名Dim spath As String '文件備份路徑Dim ssource As String '源文件名Dim se As DialogResult '表示窗體關閉后,返回窗口的一個結果OpenFileDialog1.Filter = "數據庫文件|*.mdb"se = OpenFileDialog1.ShowDialog()'選擇路徑If se = DialogResult.OK Then'MessageBox.Show("你選擇的文件夾路徑為:" & FolderBrowserDialog1.SelectedPath)TargetFileName = OpenFileDialog1.FileNameTargetFileName = TargetFileName.Replace("\HumanResourcesSystem.mdb", "/HumanResourcesSystem.mdb")'選擇的路徑是否為空If Microsoft.VisualBasic.Right(Application.StartupPath, 1) <> "/" Then'路徑,文件名spath = Application.StartupPath & "/"ssource = spath & "HumanResourcesSystem.mdb"'判斷數據庫中是否已存在該同名數據庫If Dir$(ssource) <> "" ThenIf MsgBox("是否要還原數據,確認替換它!", vbYesNo + vbQuestion, "提示") = vbNo Then Exit SubKill(ssource) '刪除文件FileCopy(TargetFileName, ssource) '復制文件MsgBox("數據還原成功!", vbInformation, "提示")ElseFileCopy(TargetFileName, ssource) '復制文件MsgBox("數據還原成功!", vbInformation, "提示")End IfEnd IfEnd IfCatch ex As ExceptionMessageBox.Show(ex.Message.ToString())End TryEnd Sub? ? ? ? ? 上面備份和還原是對access數據庫來說的,沒有任何的問題。
? ? ? ? ??但是,如果是對SQL數據庫進行備份和還原,備份肯定沒有問題,就是從數據庫中復制一份該數據庫文件,然后存放到一個選定的位置即可,但是,在還原的時候遇到了問題。
? ? ? ? ??當程序開始運行的時候,用戶使用用戶名和密碼登錄,此時改程序已經連接了數據庫,就是當前的數據庫正在使用中,此時的還原肯定需要斷開數據庫的連接,把該數據庫先刪除,然后再從指定的位置還原,那么問題來了。
? ? ? ? ??登錄到系統之后,使用的是當前數據庫的用戶名和密碼,而且需要還原的數據庫中不一定存在當前登錄用戶,此時就會報錯。
? ? ? ? ??第一種解決方法,強行斷開數據庫連接,刪除當前數據庫,并且在選擇進行數據庫還原的時候,提示數據庫還原成功之后,系統將自動關閉,就是備份完成之后,關閉該系統進程,如果用戶需要接著使用,必須重新登錄,使用新數據庫中的用戶名和密碼登錄。
? ? ? ? ??第二種解決方法,就是把數據庫備份和還原的功能放到登錄的界面,在該用戶并沒有使用數據庫的情況下進行備份和還原,就不會出現問題了。
? ? ? ? ??這里,直接從登錄窗體連接到另外一個界面,并且提供給用戶一個對數據庫進行操作的密碼,為了靈活性這里把密碼寫到了配置文件中,但是安全性就不太好了。
? ? ? ? ??在配置文件中直接使用appSettings即可,配置文件的appSettings 節元素包含一系列名稱/值對,可由應用程序用于任何目的,配置文件里面的內容沒有其它用途,就是寫好了讓程序讀的,在配置文件中寫一句代碼
? ? ? ? ??<appSettings>
???? ? ? ? ?? <add key="DataPwd"value="123" />
?? ? ? ? ?? </appSettings>
? ? ? ? ??然后,在應用程序中直接使用就可以了。
? ? ? ? ??Dim Str As String=System.Configuration.ConfigurationSettings.AppSettings("DataPwd")
總結
- 上一篇: 插入排序法
- 下一篇: MySQL删除同一个字段的多条记录