今天做一個恢複資料庫的程式時,突然想起 SqlServer 有一個功能強大的組件 sqldmo ,與是查閱了一下它的相關協助,發現它剛好能夠滿足我的需求:
下面是我的程式的部代碼,在這裡共用組大家分享。
以下代碼在 VB6中文版中編譯通過!
啟動資料服務:
Public Sub Start_server()
Dim svr As New SQLDMO.sqlServer
On Error GoTo errHwnd
svr.Start False, MyServer
svr.Close
Exit Sub
errHwnd:
If Err.Number <> -2147023840 Then
MsgBox Err.Number & vbCrLf & Err.Description, vbExclamation, "錯誤"
End If
End Sub
聯結並驗證密碼:
Public Function ConnServer(ByVal sqlServer As String, ByVal uid As String, ByVal pwd As String) As Boolean
Dim st As SQLDMO_SVCSTATUS_TYPE
Dim svr As New SQLDMO.sqlServer
On Error GoTo errHwnd
svr.LoginTimeout = 10
svr.Connect sqlServer, uid, pwd
ConnServer = True
Exit Function
errHwnd:
If Err.Number = -2147203048 Then
MsgBox "登入失敗密碼不正確,請重新輸入!", vbInformation, "提示"
Else
Resume Next
End If
End Function
恢複資料庫時如果要重新部署資料庫特理檔案位置需注意設定
恢複資料庫:
Public WithEvents ores As SQLDMO.Restore '聲明事件注意此行放在程序呼叫之前
Private Sub RestoreData(ByVal dataFile As String)
On Error GoTo errHwd
Dim oSql As SQLDMO.sqlServer
Set ores = New SQLDMO.Restore
Set oSql = New SQLDMO.sqlServer
oSql.LoginSecure = False
oSql.Connect ServerName, sqlUser, sqlPwd '聯結資料服務
ores.Action = SQLDMORestore_Database '恢複類型資料庫
ores.Database = "Rcrs" '資料庫名稱
ores.ReplaceDatabase = True '替代現有資料庫如不存則建立它
ores.Files = dataFile '備份檔案名,如果是多個裝置上的需使用.Devices屬性
ores.DatabaseFiles = dataFile '資料庫檔案此參數必須設定否則無法使用 relocatefiles
ores.FileNumber = 1 '檔案在裝置上的ID號如果你只有一個檔案就是1
'RelocateFiles 重新部署資料庫邏輯名'"[邏輯名],[物理檔案名稱地址]"
ores.RelocateFiles = "[tyrs2_data]" & "," & "[" & App.Path & "\rcrs_data.mdf]," & _
"[tyrs2_log]" & "," & "[" & App.Path & "\rcrs_log.ldf]"
DoEvents
ores.SQLRestore oSql '調用恢複方法
Set ores = Nothing
Set oSql = Nothing
Exit Sub
errHwd:
Select Case Err.Number
Case -2147221499
'這個錯誤尚不知道原因,但不影響操作結果
Resume Next
Case -2147218403
MsgBox "資料庫正在使用,請關閉所有正在使用資料的程式!", vbExclamation, "錯誤"
Case Else
MsgBox Err.Number & vbCrLf & Err.Description, vbExclamation, "提示"
End Select
End Sub
'恢複事件
Private Sub ores_PercentComplete(ByVal Message As String, ByVal Percent As Long)
ProBar.Value = ProBar.Max * (Percent / 100) '設定進度條
End Sub